2016-07-21 12 views
13

Ich versuche, einen einfachen Service in meiner eckigen App zu testen, mit Jasmine/Karma/PhantomJS.Testing Service mit angular-Mocks/Jasmin - TypeError: undefined ist kein Objekt

Jasmin Version: 2.4.1 Winkel/Winkel Mocks: 1.5.7 PhantomJS: 2.1.1

QueryParameters.service.tests.js: (QueryParameters.service.js Teil der App ist. Service-Modul, und ist eigentlich ein Fabrik, kein Service)

describe('myApp.QueryParametersService', function() { 

    var QueryParametersService; 

    beforeEach(module('myApp')); 
    beforeEach(module('app.service')); 
    beforeEach(inject(function ($injector) { 
    QueryParametersService = $injector.get('QueryParametersService'); 
    })); 

    var testObject = { 
    name : 'Hans', 
    age : '27' 
    }; 

    it('Should output correct querystrings', function() { 
    expect(QueryParametersService.toQueryParams(testObject)).toBe('?name=Hans&age=27'); 
    }); 

}); 

QueryParametersService.js:

(function() { 
    'use strict'; 

    angular.module('app.service') 
    .factory('QueryParametersService', QueryParametersService); 

    QueryParametersService.$inject = []; 

    function QueryParametersService() { 

    var service = { 
     toQueryParams : toQueryParams 
    }; 

    return service; 

    function toQueryParams(queryObject) { 
     <removed code here> 
    } 
    } 
})(); 

In Gruntfile.js:

karma: { 
     unit: { 
     options: { 
      frameworks: ['jasmine'], 
      singleRun: true, 
      browsers: ['PhantomJS'], 
      files: [ 
      '<%= yeoman.client %>/bower_components/angular/angular.js', 
      '<%= yeoman.client %>/bower_components/angular-mocks/angular-mocks.js', 
      '<%= yeoman.client %>/app/app.js', 
      '<%= yeoman.client %>/app/filters/filter.module.js', 
      '<%= yeoman.client %>/app/directives/directive.module.js', 
      '<%= yeoman.client %>/app/services/service.module.js', 
      '<%= yeoman.client %>/app/services/tests/*.js' 
      ] 
     } 
     } 
    } 

mein Hauptmodul (in app.js) wird wie folgt erklärt: getting

angular.module('myApp', [ 
    'angular-thumbnails', 
    'angularUtils.directives.dirPagination', 
    'app.directive', 
    'app.filter', 
    'app.service', 
    'color.picker', 
    'ngCookies', 
    'ngFileUpload', 
    'ngImgCrop', 
    'ngMaterial', 
    'ngMessages', 
    'ngResource', 
    'ngSanitize', 
    'ui.router', 
    'validation.match', 
    ]) 

Der Fehler im, wenn die Tests ausgeführt werden:

PhantomJS 2.1.1 (Mac OS X 0.0.0) myApp.QueryParametersService Should output correct querystrings FAILED 
     /<filepath>/client/bower_components/angular/angular.js:4632:53 
     [email protected]/<filepath>/client/bower_components/angular/angular.js:321:24 
     [email protected]/<filepath>/client/bower_components/angular/angular.js:4592:12 
     [email protected]/<filepath>/client/bower_components/angular/angular.js:4514:30 
     [email protected]/<filepath>/client/bower_components/angular-mocks/angular-mocks.js:3067:60 
     TypeError: undefined is not an object (evaluating 'QueryParametersService.toQueryParams') in /<filepath>/client/app/services/tests/query-parameters.service.tests.js (line 65) 
     /<filepath>/client/app/services/tests/query-parameters.service.tests.js:65:34 
PhantomJS 2.1.1 (Mac OS X 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.002 secs/0.009 secs) 

Wohin gehe ich hier falsch?

+1

Sieht aus wie QueryParametersService.js ist nicht in den karma.conf.js-Dateien enthalten? – jchen86

+0

Es ist hier enthalten: '<% = yeoman.client%>/app/services/service.module.js', –

+0

Eigentlich @ jchen86, Sie hatten Recht. Ich dachte, das gesamte Servicemodul wäre ausreichend, aber speziell mit dem Service gelöst mein Problem. –

Antwort

2

Wie @ jchen86 darauf hingewiesen, war QueryParametersService.js nicht in der Konfiguration enthalten (ich dachte, es wäre enthalten, wenn ich das gesamte Service-Modul einschloss). Gelöst von den gruntfile Ändern aller js Dateien in der Servicemappe enthalten:

'<%= yeoman.client %>/app/services/*.js' 
Verwandte Themen