2014-12-22 3 views
0

- $ injector가 내 테스트에서 왜 작동하지 않습니까? -

왜 내 서비스를 반환 할 수 없습니까?

foo.service.js :

'use strict'; 

angular.module('fooApp') 
.factory('FooService', function() { 

    var function1 = function function1(value) { 
     return value; 
    }; 

    return { 
     function1 : function1 
    }; 
}); 

내 테스트 (foo.service.spec.js)

'use strict'; 

describe('Service: FooService', function() { 
beforeEach(module('fooApp')); 

it('should...', inject(function(FooService) { 
    expect(FooService.function1('...')).toEqual(...); 
    .... 

})); 
.... 
}); 

내가 FooService이 정의되지 평가

. 왜 ?

오류 스택 트레이스 :

... 
TypeError: 'undefined' is not an object (evaluating 'FooService.function1') 
... 

새로운 스택 트레이스 오류 :

Error: [$injector:modulerr] Failed to instantiate module fooApp due to: 
TypeError: 'undefined' is not a function (evaluating '$stateProvider 
      .state') 
    at C:/_Projet/foo/client/app/auth/auth.js:15 
    at invoke (C:/_Projet/foo/client/bower_components/angular/angular.js:4182) 
    at runInvokeQueue (C:/_Projet/foo/client/bower_components/angular/angular.js:4088) 
    at C:/_Projet/foo/client/bower_components/angular/angular.js:4097 
    at forEach (C:/_Projet/foo/client/bower_components/angular/angular.js:323) 
    at loadModules (C:/_Projet/foo/client/bower_components/angular/angular.js:4120) 
    at createInjector (C:/_Projet/foo/client/bower_components/angular/angular.js:4004) 
    at workFn (C:/_Projet/foo/client/bower_components/angular-mocks/angular-mocks.js:2339) 
http://errors.angularjs.org/1.3.8/$injector/modulerr?p0=fooApp&p1=TypeError%3A%20'undefined'%20is%20not%20a%20function%20(evaluating%20'%24stateProvider%0A%20%20%20%20%20%20%20%20%20%20%20%20.state')%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fapp%2Fauth%2Fauth.js%3Fb8f7bccdf2d8f57e6d6f0c810e0d1c6f0d3df707%3A15%0A%20%20%20%20at%20invoke%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A4182)%0A%20%20%20%20at%20runInvokeQueue%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A4088)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A4097%0A%20%20%20%20at%20forEach%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A323)%0A%20%20%20%20at%20loadModules%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A4120)%0A%20%20%20%20at%20createInjector%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular%2Fangular.js%3Febb86f089066f7089a249e390e64bcab67622158%3A4004)%0A%20%20%20%20at%20workFn%20(http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fclient%2Fbower_components%2Fangular-mocks%2Fangular-mocks.js%3Fb01a9cf8de7de4def103da067347cb07fe247c96%3A2339)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A1145%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2177%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2130%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2460%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2177%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2130%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2606%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2177%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A8080%2Fbase%2Fnode_modules%2Fkarma-jasmine%2Flib%2Fjasmine.js%3F437512c57124d57f5ec77e2e82bfb4e3cdd15cce%3A2167 
    at C:/_Projet/foo/client/bower_components/angular/angular.js:4118 
    at forEach (C:/_Projet/foo/client/bower_components/angular/angular.js:323) 
    at loadModules (C:/_Projet/foo/client/bower_components/angular/angular.js:4120) 
    at createInjector (C:/_Projet/foo/client/bower_components/angular/angular.js:4004) 
    at workFn (C:/_Projet/foo/client/bower_components/angular-mocks/angular-mocks.js:2339) 
+0

당신이 파일 섹션에 카르마의 설정에'foo.service.js'를 추가 했습니까? – dfsq

+0

예 'client/components/**/*. js' – MaximeF

+0

프로젝트 코드의 C :/_ Project/foo/client/app/auth/auth.js 부분입니까? 그렇다면 테스트 설정의 일부로 모듈에로드되지 않는 종속성이있는 것처럼 보입니다. – musicfuel

답변

1

당신이 https://docs.angularjs.org/api/ngMock/function/angular.mock.inject

'use strict'; 

describe('Service: FooService', function() { 
    var FooService; 

    beforeEach(function(){ 
     module('fooApp'); 
     inject(function (_FooService_) { 
      FooService = _FooService_; 
     }); 
    }); 

.... 
}); 

에서 언급 한 바와 같이 당신이 참조를 해결하기 위해 밑줄 포장을 사용해야 조롱 각도를 사용하는 경우 참고 : Th 이 게시물의 이전 버전에는 두 개의 beforeEach() 전화가있었습니다. 모듈이 초기화되기 전에 주입이 실행 중일 수 있습니다. 위의 편집 된 버전은 모듈 초기화를 하나의 beforeEach()으로 옮깁니다.

FooService이 테스트 인라인 주입되는으로 주입 사용할 때 당신은 또 다른 접근 방법을 시도 할 수 있습니다 :

'use strict'; 

describe('Service: FooService', function() { 
    beforeEach(module('fooApp')); 

    it('should...', inject(function(FooService) { 
     expect(FooService.function1('...')).toEqual(...); 
     .... 

    })); 
.... 
}); 
+0

도움 주셔서 감사합니다. 작동하지 않습니다. – MaximeF

+0

위의'module ('fooApp')가 같은 beforeEach()로 옮겨 졌음에주의하십시오. – musicfuel

+0

그래도 작동하지는 않습니다. – MaximeF

관련 문제