【问题标题】:Angular 1.x Mocking dependencies in test测试中的 Angular 1.x 模拟依赖项
【发布时间】:2017-03-22 22:15:20
【问题描述】:

在过去的几天里,我浏览了整个 SO 和互联网,但我无法弄清楚我错过了什么。 (角度 1.4.7)

我正在开发的应用程序很大,每个控制器往往有很多依赖项;本地服务和第三方。我模拟模块,并注入依赖项。但是,我发现如果我不模拟这些依赖项注册到的模块,我将收到“[$injector:unpr] Unknown provider:”错误。更糟糕的是,这些依赖项可能还有其他依赖项,现在我要陷入“angular.mock.module”的兔子洞——所有这些也是如此。如果我设法模拟了所有模块,它就可以工作。

我确定这不正确,但没有博客文章、现有规范文件或视频提及类似问题。我肯定错过了什么。无论我使用 ngMock 还是 BardJS 之类的助手,都会发生这种情况。

我了解模拟服务的概念,但我认为这在这里不太适用。我不会深入研究 angular 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;
            })
        });

【问题讨论】:

    标签: angularjs testing mocha.js karma-mocha


    【解决方案1】:

    好的,我知道我错过了什么。

    我需要模拟整个顶级应用模块,而不是单独模拟每个子模块。

    所以上面是这样的:

    beforeEach(angular.mock.module("app.home"));
    beforeEach(angular.mock.module("app.notify"));
    beforeEach(angular.mock.module("ngDialog"));
    

    变成:

    beforeEach(angular.mock.module("app"));
    

    谢谢我!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 2013-07-07
      • 1970-01-01
      相关资源
      最近更新 更多