使用Jasmine监视console.error()

Chr*_*ian 36 javascript unit-testing jasmine

我实际上是JavaScript和Jasmine的新手.所以它可能是非常明显的解决我的问题,但我看不到它.

我想检查console.error()加载时是否(已经存在)JavaScript应用程序调用.我真的没有看到如何用Jasmine实现这一点.我已经包含了JavaScript文件以及spec文件SpecRunner.html.但我认为我以某种方式需要"实例化"应用程序以测试它是否会在控制台上抛出任何错误,对吧?

或者我应该SpecRunner.html仅为此目的将代码包含在应用程序的HTML代码中?

And*_*rle 57

你可以console.error像这样窥探:

beforeEach(function(){
  spyOn(console, 'error');
})

it('should print error to console', function(){
  yourApp.start();
  expect(console.error).toHaveBeenCalled();
})
Run Code Online (Sandbox Code Playgroud)

  • 确保将 `spyOn(console, 'error');` 放在 `beforeEach` 方法中。我发现它放在那里时可以工作,但不能在单独的测试中工作 (4认同)
  • 对我不起作用 - 尝试使用 `toHaveBeenCalledWith()` 来断言特定的警告消息输出到 `console.warn`。我在 Karma 控制台中看到了正确的警告,但测试失败了:`预期的间谍警告已被调用 ['*** 期望的错误 msg ***'] 但它从未被调用过。` 只使用 `expect (console.warn).toHaveBeenCalled()` 也失败了:`Expected spy warn to have been called.`。 (2认同)