过去几天我看了SO和互联网,我无法弄清楚我错过了什么。 (Angular 1.4.7)
我正在处理的应用程序很大,每个控制器都有很多依赖关系;本地服务和第三方。我模拟了模块,并注入了依赖项。但是,我发现如果我还没有模拟那些依赖项注册的模块,我将得到“[$ injector:unpr]未知提供程序:”错误。更糟糕的是,这些依赖关系可能还有其他依赖关系,而现在我正在走向一个“angular.mock.module”的兔子洞 - 所有这些也是如此。如果我设法模拟所有模块,它就可以工作。
我确定这不正确,但没有博客文章,现有的规范文件或视频提到了类似的问题。我肯定错过了什么。无论我使用ngMock还是像BardJS这样的帮手,都会发生这种情况。
我理解模拟服务的概念,但我认为这并不适用于此。我不会潜入角度ui bootstrap并开始逐个嘲笑一切。下面的测试按原样运行。如果控制器中存在另一个依赖关系,例如“DataService”,我将不得不模拟其模块及其所有依赖模块。提前致谢!我知道这一定很简单。
describe("HomeController", function() {
beforeEach(angular.mock.module("app.home"));
beforeEach(angular.mock.module("app.notify"));
beforeEach(angular.mock.module("ngDialog"));
describe("controller", function() {
var scope;
var controller;
var HomeController;
beforeEach(inject(function($rootScope, _Notify_, _ngDialog_, $controller) {
scope = $rootScope.$new();
controller = $controller;
HomeController = controller("HomeController", {
$scope: scope
});
Notify = _Notify_;
ngDialog = _ngDialog_;
}));
it('should exist', function() {
expect(HomeController).to.be.defined;
})
});
答案 0 :(得分:1)
好的,我发现了我所缺少的东西。
我不需要单独模拟每个子模块,而是需要模拟整个顶级应用程序模块。
所以上面这个:
beforeEach(angular.mock.module("app.home"));
beforeEach(angular.mock.module("app.notify"));
beforeEach(angular.mock.module("ngDialog"));
变为:
beforeEach(angular.mock.module("app"));
谢谢我!