角度测试服务覆盖console.log(Jasmine)

时间:2016-03-22 09:41:26

标签: angularjs unit-testing jasmine karma-jasmine

我有一个Angular日志服务,它根据环境常量覆盖console.log和其他服务,简化示例:

if(!DEBUG_ENV) {
    console.log = function(){}; 
}

所以我的问题是如何用Jasmine测试console.log实际上是被我的服务覆盖到这个空函数。我已经嘲笑了我的常数并注入了我的服务,但我无法确定如何测试是否用Jasmine覆盖了console.log。

1 个答案:

答案 0 :(得分:0)

我通过模拟$ window解决了这个问题,然后在我的服务中覆盖了$ window,而不是直接覆盖控制台[无论如何]:

$provide.value('$window', {
    console: {
      log: function(){return 'enabled'};
    }
});

然后我把它注入我的服务:

inject(['$window', function($window) {
   _window = $window;
}]);

然后在我的服务中,我可以做以下事情:

if(!DEBUG_ENV) {
   $window.console.log = function(){return 'disabled'};
}

最后,我可以通过检查我注入的$ window模拟返回的内容来检查是否所有事情都按预期发生了'启用'或者'禁用'。

expect( _window.console.log() ).toEqual('disabled');