我有以下问题:
假设我有模块
angular.module('myModule',['$strap'] );//module depends on AngularStrap
myModule的服务定义如下:
angular.module('myModule').service('myModuleService', ['$modal', function ($modal)
{ ....
}); //depends on $modal service from AngularStrap
现在我需要测试myModuleService,我需要模拟$ modal服务 在test(基于jasmine)myModuleService中加载如下
var modalMock = jasmine.createSpy();
..
angular.mock.module('myModule');
...
$provide.value('$modal', modalMock);
..
angular.mock.inject(function ($injector) {
// Initialize the service under test instance
myService = $injector.get('myModuleService');
});
问题是加载myModuleService时,还加载了真正的$ modal服务而不是模拟$ modal。
问题是:为了使用mockModal而不是真正的$ modal加载myService,这里缺少什么?
提前致谢
答案 0 :(得分:3)
我遗漏了一些测试实现细节,但以下工作:
describe('mock modal', function () {
var modalMock = jasmine.createSpyObj('modal', ['show']),
service;
beforeEach(function () {
angular.mock.module('myModule');
angular.mock.module(function ($provide) {
$provide.value('$modal', modalMock);
});
angular.mock.inject(function (myModuleService) {
// Initialize the service under test instance
service = myModuleService;
});
});
it('mocks modal', function () {
service.foo();
expect(modalMock.show).toHaveBeenCalled();
});
});
您可以找到完整的fiddle here