在Jasmine UTs中打印angular $ log语句?

时间:2014-11-29 23:25:22

标签: angularjs jasmine

我使用Jasmine来修改我的AngularJS应用程序。使用Angular的$ log.debug()而不是console.print()似乎是一种好习惯,因为它可以编译出来。

但是,我的Jasmine UTs中没有显示$ log消息,这使调试失败变得困难。

是否可以配置Angular / Jasmine以便UT跑步者收集$ log消息?功能的奖励点类似于Python鼻子的--log-capture,其中为所有测试捕获日志,但仅显示失败的日志。

1 个答案:

答案 0 :(得分:0)

这实际上并不难。要点是,您需要将$log拉入测试套件并将其注入beforeEach()块。然后,您可以直接将邮件转储到console.log中的afterEach()(如下所示),如果您愿意,甚至可以在测试中。

describe("MyService", function() {
    var MyService, $log;

    beforeEach(function() {
        inject(function (_MyService_, _$log_) {
            MyService = _MyService_;
            $log = _$log_;
        });
    });

    afterEach(function () {
        console.log($log.debug.logs); //do it here to output for every test...
    });

    it("should output debug logs", function() {
        //do something with MyService that would put a message in $log
        expect(true).toBe(true);
        console.log($log.debug.logs); //or here to output for just this test!
    });
});

有关写出其他日志级别的更深入解释和示例,我建议阅读本文(这是我学习它的地方):

http://www.jvandemo.com/how-to-access-angular-log-debug-messages-from-within-karma/

关于你的“奖励积分” - 我对Python一无所知,但也许我可以指出你正确的方向。如果您正在运行Jasmine 1.x,那么我认为您可以检查当前测试的结果:jasmine.getEnv().currentSpecMore details

但是,如果您正在运行Jasmine 2.x,那么您将遇到与我相同的问题,因为他们已经隐藏了该对象。 Here我提出了一个问题。

更新:An answer最近提供给我的上述问题使用了Jasmine的报告功能来填充jasmine.getEnv().currentSpec,因此您确实可以使用它来仅打印日志语句以进行失败的测试。