2016-07-05 2 views
1

저는 왜 내 테스트가 내 서비스 제공자를 찾으려고하는지 알아 내려고하고 있습니다.테스트에서 서비스를 제공하는 공급자가 필요한 이유는 무엇입니까 (알 수없는 공급자)?

beforeEach(function() { 
    module('loggingModule', inject(function ($q, _loggingService_) { 
     var deferred = $q.defer(); 
     var loggingService = _loggingService_; 
     deferred.resolve('somevalue'); // always resolved, you can do it from your spec 

     // jasmine 2.0 
     spyOn(loggingService, 'removeAndGetNext').and.returnValue(deferred.promise); 
    })); 
}); 

loggingServiceloggingModule의 일부가 서비스로 등록되어있다. 내 테스트를 호출

알 수없는 업체에 실패 loggingServiceProvider < - loggingService

나는 그것이 작동 생성자 주입과 컨트롤러에 내 서비스를 주입합니다.

왜 테스트에는 공급자가 필요합니까? 그런 식으로, 어떤 의존성 beforeEach(inject(function() {}))을 incject보다 beforeEach(module('loggingModule'))

답변

1

먼저 설치 각도 모듈 :

angular.module('loggingModule', []) 
 
    .service('loggingService', function($q) { 
 
    this.methodUnderTest = function(attr) { 
 
     return this.removeAndGetNext(attr) 
 
    } 
 
    this.removeAndGetNext = function() { 
 
     // return $q.resolve('foo') 
 
    } 
 
    }) 
 

 
describe('Module `loggingModule`', function() { 
 
    var loggingService 
 
    var promise 
 
    var $rootScope 
 

 
    beforeEach(module('loggingModule')) 
 

 
    beforeEach(inject(function($q, _loggingService_, _$rootScope_) { 
 
    loggingService = _loggingService_ 
 
    $rootScope = _$rootScope_ 
 
    promise = $q.defer() 
 
    spyOn(loggingService, 'removeAndGetNext').and.returnValue(promise.promise) 
 
    })) 
 

 
    it('.methodUnderTest() calls .removeAndGetNext()', function(done) { 
 
    var mockArgument = 'some arguments' 
 
    var mockResponse = 'some resolved value' 
 

 
    loggingService.methodUnderTest(mockArgument).then(function(r) { 
 
     expect(r).toBe(mockResponse) 
 
     expect(loggingService.removeAndGetNext).toHaveBeenCalledWith(mockArgument) 
 
     done() 
 
    }) 
 
    
 
    promise.resolve(mockResponse) 
 
    $rootScope.$apply() 
 
    }); 
 
})
<link href="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine.css" rel="stylesheet" /> 
 
<script src="//safjanowski.github.io/jasmine-jsfiddle-pack/pack/jasmine-2.0.3-concated.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-mocks.js"></script>

관련 문제