如何检查 Karma/Jasmine 中的控制台日志?

问题描述 投票:0回答:2

假设我有这个功能我想测试:

var test = function () {
  console.log('words!');
};

我会写这样的东西

define('test()', function () {
  it('prints "words!" to the screen', function() {
    test();
    expect(<browser logs>).toContain('words!'); // TODO
  }
}

但我不知道如何查看控制台日志或者这是否可能。我最好在任何浏览器中执行此操作,或者至少在 PhantomJS 中。

jasmine phantomjs karma-runner
2个回答
9
投票

您可以在console.log 函数上创建spy。代码可能看起来像...

describe("log reporting", function () {    
  beforeEach(function(){
    spyOn(window.console, 'log');
  });
  it('should print log message to console', function(){
    test();
    expect(window.console.log).toHaveBeenCalled();
  })
});

通过这个例子,你会知道你的 console.log 函数被调用了。这正是您需要了解的。您不想将记录的消息与预期值进行比较,只是因为您不会对代码进行单元测试,而是对 window.console.log 函数本身进行单元测试,而该函数不是您编写的;)您可以调用“.and.callFake(function (){做一点事});”。在这种情况下,您将执行一些操作而不是实际的 console.log 调用,例如检查您的值。


0
投票

您可以使用 calls 跟踪器并检查其提供的参数。

示例:

var test = function () {
  console.log('Hello world');
};

it('prints "Hello words" to the screen', function() {
  const logSpy = spyOn(console, 'log').and.callThrough();
  test();
  expect(logSpy.calls.count()).toBe(1) // check how many time it called
  expect(logSpy.calls.first().args.length).toBe(2) // check how many words
  expect(logSpy.calls.first().args[0]).toBe('Hello') // first args = first word
  expect(logSpy.calls.first().args[1]).toBe('world') // and so on....
}

希望有帮助,

© www.soinside.com 2019 - 2024. All rights reserved.