gpt4 book ai didi

unit-testing - AngularJS 在服务测试中注入(inject)服务模拟

转载 作者:行者123 更新时间:2023-12-04 11:54:31 26 4
gpt4 key购买 nike

一段时间以来,我一直在尝试测试一项服务无济于事,希望能得到一些帮助。这是我的情况:

我有一个 服务 看起来有点像这样

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;

}]);

我想模拟注入(inject) 'myService' 的服务在服务被注入(inject)我的测试之前,我可以测试 初始化代码 以下
  var mySvc = {
params: {}
}

// Listen to route changes.
$rootScope.$on('$routeUpdate', mySvc.updateHandler);

我正在使用 Jasmine 进行测试和模拟。这就是我现在想出的
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();
});
});

但这不起作用。我的 rootscope 模拟并没有取代原来的模拟,而依赖注入(inject)文档最让我感到困惑。

请帮忙

最佳答案

我会监视实际的 $rootScope 而不是尝试注入(inject)您自己的自定义对象。

var target, rootScope;
beforeEach(inject(function($rootScope) {
rootScope = $rootScope;

// Mock everything here
spyOn(rootScope, "$on")
}));

beforeEach(inject(function(myService) {
target = myService;
}));

it('should have called rootScope.$on', function(){
expect(rootScope.$on).toHaveBeenCalled();
});

我已经在 CoffeScript 中对此进行了测试,但上面的代码应该仍然可以工作。

关于unit-testing - AngularJS 在服务测试中注入(inject)服务模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022320/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com