1

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

我们的团队最近决定使用 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失败的测试是与?无关的代码单元。我觉得好像我在这里遗漏了一些东西,让事情变得比他们应该做的要困难得多。应该如何编写灵活且不受应用程序中引入的其他副作用影响的测试?

4

1 回答 1

2

看来这是角度模拟的一个已知问题

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

this.debugEnabled = function(flag) {
   return this;
};
于 2013-05-31T18:31:11.357 回答