2016-07-21 9 views
13

jasmine/karma/phantomJS를 사용하여 각 응용 프로그램에서 간단한 서비스를 테스트하려고합니다.각도 모의/재스민으로 서비스 테스트 - TypeError : 정의되지 않음이 객체가 아닙니다

자스민 버전 : 2.4.1 각도/각도-모의 객체 : 1.5.7 phantomJS : 2.1.1

QueryParameters.service.tests.js : (QueryParameters.service.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> 
    } 
    } 
})(); 
,536 : 서비스 모듈, 그리고 실제로 공장이 아닌 서비스)

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입니다 Gruntfile.js에서 91,363,210

: (app.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' 
      ] 
     } 
     } 
    } 

내 주요 모듈은 다음과 같이 선언한다 :

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', 
    ]) 

테스트를 실행할 때 점점 오류 메신저 :

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) 

여기서 나는 어디가 잘못 될까요?

+1

karma.conf.js 파일에는 QueryParametersService.js가 포함되어 있지 않은 것 같습니다. – jchen86

+0

여기에 포함되어 있습니다 : '<% = yeoman.client %>/app/services/service.module.js', –

+0

사실, @ jchen86, 당신 말이 맞았습니다. 나는 전체 서비스 모듈을 포함하여 충분할 것이라고 생각했지만, 특히 서비스 문제를 포함하여 내 문제를 해결했습니다. –

답변

2

@ jchen86에서 지적했듯이 QueryParametersService.js는 구성에 포함되지 않았습니다 (전체 서비스 모듈을 포함 시켰을 때 포함될 것으로 생각했습니다). 서비스 폴더의 모든 js 파일을 포함하도록 gruntfile을 변경하면 해결됩니다.

'<%= yeoman.client %>/app/services/*.js' 
관련 문제