所以我读过很多帖子,但到目前为止没有任何建议。
我想要模拟一个模块 - 比如angular-foo。原始文件与其他所有内容一起加载。
angular.module('app', ['angular-foo'...
我想在我的业力/摩卡测试中模拟这个模块。我已经尝试过像这样称呼它的建议,但这是不行的。
beforeEach(module('app'));
beforeEach(module('angular-foo'))
如何完全阻止原始angular-foo运行(但它必须作为其余代码的一部分加载)?
答案 0 :(得分:5)
要模拟factory
,service
和value
服务,可以使用angular.mock.module
object argument
beforeEach(module('app', 'angular-foo', {
fooFactoryService: ...,
fooValueService: ...
}));
要在配置阶段(constant
和provider
)模拟可用于注入的服务,应使用配置功能
beforeEach(module('app', 'angular-foo', ($provide) => {
$provide.constant('fooConstantService', ...),
$provide.provider('fooProviderService', ...),
}));
该行中的最后一个模块会覆盖其他模块中的服务。可以部分(使用$provide.decorator
)或完全模拟服务。
如果angular-foo
模块根本没有加载,但是其他模块使用它,可以在规范中完全重新定义它的模拟版本
angular.module('angular-foo', [])...
beforeEach(module('app', 'angular-foo'));
答案 1 :(得分:0)
我的诀窍是在模块声明之前放置提供程序:
beforeEach(module(function($provide) {
$provide.provider('myProvider', function() {
return {
myProviderFunction: function() {},
$get: function () {
return {
myProviderFunction: function() {}
};
}
};
});
}));
beforeEach(module('myApp'));