在过去的几天里,我遍历了 SO 和互联网,但我无法弄清楚我遗漏了什么。 ( Angular 1.4.7)
我正在开发的应用程序很大,每个 Controller 往往有很多依赖项;本地服务和第三方服务。我模拟模块,并注入(inject)依赖项。但是,我发现如果我不同时模拟这些依赖项注册到的模块,我将得到“[$injector:unpr] Unknown provider:”错误。更糟糕的是,这些依赖项可能有其他依赖项,现在我正在深入“angular.mock.module”的兔子洞 - 也包括所有这些。如果我设法模拟了所有模块,它就可以工作。
我确定这是不正确的,但没有博客文章、现有规范文件或视频提到类似的问题。我肯定错过了什么。无论我使用 ngMock 还是像 BardJS 这样的助手,都会发生这种情况。
我理解模拟服务的概念,但我认为这并不适用于此。我不会深入研究 angular ui bootstrap 并开始一一模拟所有内容。下面的测试按原样工作。如果 Controller 中有另一个依赖项,例如“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;
})
});
最佳答案
好吧,我知道我错过了什么。
我不需要单独模拟每个子模块,而是需要模拟整个顶级应用程序模块。
所以上面这个:
beforeEach(angular.mock.module("app.home"));
beforeEach(angular.mock.module("app.notify"));
beforeEach(angular.mock.module("ngDialog"));
变成:
beforeEach(angular.mock.module("app"));
谢谢我!
关于angularjs - 测试中的 Angular 1.x 模拟依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42963663/