我使用Jasmine来修改我的AngularJS应用程序。使用Angular的$ log.debug()而不是console.print()似乎是一种好习惯,因为它可以编译出来。
但是,我的Jasmine UTs中没有显示$ log消息,这使调试失败变得困难。
是否可以配置Angular / Jasmine以便UT跑步者收集$ log消息?功能的奖励点类似于Python鼻子的--log-capture,其中为所有测试捕获日志,但仅显示失败的日志。
答案 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().currentSpec
。 More details
但是,如果您正在运行Jasmine 2.x,那么您将遇到与我相同的问题,因为他们已经隐藏了该对象。 Here我提出了一个问题。
更新:An answer最近提供给我的上述问题使用了Jasmine的报告功能来填充jasmine.getEnv().currentSpec
,因此您确实可以使用它来仅打印日志语句以进行失败的测试。