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