2016-07-05 17 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); 
    })); 
}); 

LoggingServiceのloggingModuleの一部とがサービスとして登録されています。私のテストを呼び出す

不明なプロバイダで失敗します。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>

関連する問題