【问题标题】:Why is $log always silenced by angular-mocks?为什么 $log 总是被 angular-mocks 静音?
【发布时间】:2013-12-09 23:33:20
【问题描述】:

对于 AngularJS 应用程序,建议使用 $log 服务而不是 console.log。这种日志记录的一个常见用例是在运行测试时看到调试打印。问题是,默认情况下,angular-mocks 将 $log 静音,将其替换为模拟。好吧,我有时确实需要测试我的调试打印,但我只需要更频繁地查看它。问题是,默认行为坚持使用虚拟日志记录,我什至看不到恢复到真实 $log 的正确方法。我制作了一个 jsfiddle 示例来说明它,尝试在查看 devtools 控制台http://jsfiddle.net/ivan4th/EnvL9/ 时运行它

var myApp = angular.module('myApp', []);

describe('myApp', function () {
    var element, rootScope;
    beforeEach(module('myApp'));
    it('does something', inject(function ($log) {
        $log.log("this message gets eaten by angular-mocks");
        console.log("this message is visible though");
    }));
});

第一条消息被跳过,而第二条消息按预期显示。 为什么会使用这种奇怪的行为,除了不使用 $log 之外,还有什么方法可以解决它?

【问题讨论】:

    标签: angularjs testing logging mocking


    【解决方案1】:

    模拟 $log 服务旨在让您轻松测试和断言是否记录了消息,具有讽刺意味的是,它还可以防止在运行测试时向控制台发出日志噪音。

    如果您不喜欢这种行为,您可以通过以下方式轻松更改:

    $log.log = function(message){ console.log(message);};
    

    您可以通过以下方式将所有以前记录的消息输出到控制台:

    console.log($log.log.logs)
    

    您可以在茉莉花之前或之后将任一方法添加到全局中。

    【讨论】:

      【解决方案2】:

      根据 dtabuenc 的回答,我已经实施了解决方法 以全局形式转储 Jasmine 测试失败的日志输出 afterEach():

      afterEach(inject(function ($log) {
        // dump log output in case of test failure
        if (this.results().failedCount) {
          var out = [];
          angular.forEach(["log", "info", "warn", "error", "debug"], function (logLevel) {
            var logs = $log[logLevel].logs;
            if (!logs.length)
              return;
            out.push(["*** " + logLevel + " ***"]);
            out.push.apply(out, logs);
            out.push(["*** /" + logLevel + " ***"]);
          });
          if (out.length) {
            console.log("*** logs for: " + this.description + " ***");
            angular.forEach(out, function (items) { console.log.apply(console, items); });
          }
        }
        $log.reset();
      }));
      

      不幸的是,没有替换 angular-mocks 的 $log 实现 不同日志级别的消息顺序丢失了,但我猜 我将能够忍受它。静默所有日志消息,包括 Angular 在测试期间自己的错误和警告听起来仍然很糟糕 虽然是设计选择。

      【讨论】:

        猜你喜欢
        • 2014-08-02
        • 2022-01-21
        • 2014-05-28
        • 2016-11-02
        • 1970-01-01
        • 1970-01-01
        • 2019-06-16
        • 2010-11-26
        • 1970-01-01
        相关资源
        最近更新 更多