45

我实际上是 JavaScript 和 Jasmine 的新手。因此,解决我的问题可能很明显,但我看不到。

我想console.error()在加载时检查(已经存在的)JavaScript 应用程序是否调用。我真的不知道如何用茉莉花来实现这一点。我已将 JavaScript 文件和规范文件包含在SpecRunner.html. 但我认为我需要以某种方式“实例化”应用程序以测试它是否在控制台上引发任何错误,对吧?

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

4

3 回答 3

79

你可以这样监视console.error

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

it('should print error to console', function(){
  yourApp.start();
  expect(console.error).toHaveBeenCalled();
})
于 2013-01-25T22:22:23.817 回答
1

您可以像这样覆盖标准的 console.error 函数:

//call the error function before it is overriden
console.error( 'foo' );

//override the error function (the immediate call function pattern is used for data hiding)
console.error = (function () {
  //save a reference to the original error function.
  var originalConsole = console.error;
  //this is the function that will be used instead of the error function
  function myError () {
    alert( 'Error is called. ' );
    //the arguments array contains the arguments that was used when console.error() was called
    originalConsole.apply( this, arguments );
  }
  //return the function which will be assigned to console.error
  return myError;
})();

//now the alert will be shown in addition to the normal functionality of the error function
console.error( 'bar' );

此解决方案适用于 Jasmin 或其他任何东西。只需将上面的代码放在其他代码之前,之后的任何调用console.error()都将调用被覆盖的函数。

于 2013-01-25T10:09:20.457 回答
0

使用 toThow 和 toThrowError http://jasmine.github.io/edge/introduction#section-Spies:_and.throwError

于 2016-10-19T13:50:55.810 回答