【问题标题】:AngularJS mocking $logProvider in config blockAngularJS 在配置块中模拟 $logProvider
【发布时间】:2013-05-31 17:39:39
【问题描述】:

在使用 Karma(Testacular) 和 Jasmine 以 Angular 编写单元测试时,有没有办法注入提供程序?

我们的团队最近决定使用 angularjs $log 将调试详细信息写入控制台。这样我们就可以利用通过$logProvider.debugEnabled() 方法禁用日志记录的能力。

angular.module("App", ["prismLogin", "ui.bootstrap"])
    .config(["$routeProvider", "$logProvider", 
     function ($routeProvider, $logProvider) {
         $routeProvider
         //routes here edited for brevity

         //This is the offending line, it breaks several pre-existing tests
         $logProvider.debugEnabled(true);
     }]);

但是,在添加 $logProvider.debugEnabled(true); 行之后,我们的几个测试不再成功执行,并显示以下消息失败:

TypeError: Object doesn't support property or method 'debugEnabled' from App

所以我的问题又来了,是否可以模拟$logProvider?或者我应该为测试工具提供我自己的配置块?

我试图寻找一种方法来模拟应用程序模块,但没有成功。在我看来,使用具体的应用程序模块而不是模拟是非常脆弱的。我想避免每次在应用程序中进行更改或运行配置块时都重新编写与应用程序模块相关的测试。

失败的测试是与$logProvider无关的代码单元?我觉得好像我在这里遗漏了一些东西,让事情变得比他们应该做的要困难得多。应该如何编写灵活且不受应用程序中引入的其他副作用影响的测试?

【问题讨论】:

    标签: unit-testing angularjs dependency-injection jasmine karma-runner


    【解决方案1】:

    这似乎是带有角模拟的know issue

    在问题得到解决之前,我能够通过将以下方法添加到 angular-mocks.js 第 295 行的 angular.mock.$LogProvider 定义来解决问题。

    this.debugEnabled = function(flag) {
       return this;
    };
    

    【讨论】:

    • 乔纳森 - 你的意思是“返回真实”吗?
    猜你喜欢
    • 2014-11-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2021-03-28
    • 2015-07-15
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多