2016-09-29 14 views
0

最近、自分のコードベースにカスタムグローバルエラーハンドラを実装しました。私はQUnit + Sinonスイートでその動作をテストしたかったのです。しかし、これは動作していないよう:QUnit/Sinonでwindow.onerrorをテストする

QUnit.test("It should fire an ajax request on errors", function(assert) { 
    var done = assert.async(); 

    var myOnerror = window.onerror; 
    window.onerror = function(msg, url, line, col, error) { 
     myOnerror(msg, url, line, col, error); 
     //Some assertions on myOnerror execution 
     done(); 
    }; 

    banana(); //Trigger an error to have window.onerror execute 
}); 

banana()呼び出しによって引き起こさReferenceErrorが実際に故障してテスト実行を停止しQUnit自体によってキャッチされているので。

私自身でエラーを処理したい、または手動でエラーを投げて、自分のwindow.onerrorがQUnitの代わりに呼び出されるようにする方法はありますか?

答えて

1

問題は、気づいたように、QUnitがエラーをキャッチすることです。あなたのテストのうちの1つが実際に予期しないエラーを投げた場合、テスト実行が爆発しないように、これを実行します。ここのトリックは、がエラーがスローされることをテストしたくないということです。代わりに、実際にonerrorハンドラがあり、正常に動作することをテストしたいとします。

エラーハンドラが正しく動作することをテストするには、にエラーを送信する必要はありません。!これは変わったように見えるかもしれませんが、あなたはしません。代わりに、偽の引数でテスト内からエラーハンドラー関数を呼び出すことができます。

+0

エラーが発生したときにwindow.onerrorが呼び出されることは実際には無意味なので(設計によって保証されるはずです)、実際にテストされるものは何ですか? myOnError'はやっています....ありがとう! – Raibaz

関連する問題