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 に答える