【发布时间】:2015-06-25 10:15:06
【问题描述】:
所以基本上没有关于如何省略模块上的 config/run/provider 块而不为单元测试做一些文件加载排序黑客的信息。假设如下:
// dependency chain for providers:
// aaa <- bbb <- ccc
angular.module('module0').provider('bbb', [
'aaaProvider',
function (aaaProvider) {
// aaaProvider definition
...
});
angular.module('module1').provider('ccc', [
'bbbProvider',
function (bbbProvider) {
// bbbProvider definition
...
});
angular.module('module1').controller('controller', [
function () {
// controller definition
}]);
现在假设我们正在为controller 编写单元测试。我们该怎么做?
module('module1');
inject(function ($controller, $rootScope) {
...
});
糟糕,我们遇到了问题。 module('module1') 将触发ccc 的提供者定义,它依赖于bbb,它依赖于aaa。因此,除非我们阻止在 module1 上触发 ccc 的提供程序定义,否则我们将运行与 controller 无关的代码,我们正在单元测试。
我们可以使用module(function ($provide) { ... }); 表示法模拟bbb,这样我们就根本不需要加载module0。
但这并不能解决ccc 的问题。我无法阻止它运行。
问题:有没有办法阻止module1运行ccc提供者的定义,这与controller无关,我们正在单元测试?
到目前为止我尝试过的事情:
-
在单元测试中覆盖定义:
angular.module('module1').provider('ccc', [function () {}]);
【问题讨论】: