私はしばらくの間サービスをテストしようとしていて、助けを求めていました。ここに私の状況は次のとおりです。AngularJSインジェクションサービスの模擬内部テスト
私は少しこのよう
myModule.factory('myService', ['$rootScope', '$routeParams', '$location', function($rootScope, $routeParams, $location) {
var mySvc = {
params: {}
}
// Listen to route changes.
$rootScope.$on('$routeUpdate', mySvc.updateHandler);
// Update @params when route changes
mySvc.updateHandler = function(){ ... };
...
...
return mySvc;
}]);
を探してサービスを持っていると私は私がテストできるようにサービスが私のテストに注入される前'myService'
に注入されたサービスをモックとしたいです私はテストとモックのためにジャスミンを使用しています
var mySvc = {
params: {}
}
// Listen to route changes.
$rootScope.$on('$routeUpdate', mySvc.updateHandler);
の下
初期化コード。これは私が今までに思いついたものです describe('myService', function(){
var rootScope, target;
beforeEach(function(){
rootScope = jasmine.createSpyObj('rootScope', ['$on']);
module('myModule');
angular.module('Mocks', []).service('$rootScope', rootScope);
inject(function(myService){
target = myService;
});
});
it('should be defined', function(){
expect(target).toBeDefined();
});
it('should have an empty list of params', function(){
expect(target.params).toEqual({});
});
it('should have called rootScope.$on', function(){
expect(rootScope.$on).toHaveBeenCalled();
});
});
これはうまくいきません。私のルートスコープモックは元のものに取って代わるものではなく、Dependency Injectionのドキュメントは何よりも私を混乱させています。
私が代わりに独自のカスタムオブジェクトを挿入しようとしているの実際の$ rootScopeをスパイだろう
ありがとうございます!魅力のように働いた。私は前にそれを試していないとは信じられません。 –
spyOn(rootScope、 "$ on")を spyOn(rootScope、 "$ on")に変更し、andCallThrough();を追加する必要がありました。 でも素晴らしい仕事をして、正しい方向に向かいました。 – blackmind