有没有办法在使用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
?或者我应该为测试工具提供自己的配置块吗?
我试图寻找一种模拟app模块的方法,但没有运气。在我看来,使用具体的应用程序模块而不是模拟是非常脆弱的。每次在应用程序中进行更改或运行配置块时,我都希望避免重新处理与app模块关联的测试。
失败的测试是与$logProvider
无关的代码单元?我觉得好像我在这里遗失了一些东西,让事情变得比他们应该的更难。如何编写灵活且不受应用程序中引入的其他副作用影响的测试?
答案 0 :(得分:2)
这似乎是know issue带角度模拟。
在问题得到解决之前,我能够通过在第295行的angular-mocks.js中的angular.mock.$LogProvider
定义中添加以下方法来解决此问题。
this.debugEnabled = function(flag) {
return this;
};