4

私はjavascriptを初めて使用し、ジャスミンを使用してエラー処理コードの単体テストを試みています。

具体的には、window.onerror() を置き換えるカスタム コード (windowHandleError と呼ばれる) が呼び出され、目的の動作を行っていることを確認するテストを作成しようとしています。

私は次の行に沿って何かを試しました:

       it("testing window.onerror", function() {
        spyOn(globalerror, 'windowHandleError');
        globalerror.install();

        var someFunction = function() {
            undefinedFunction();
        };
        expect(function() {someFunction();}).toThrow();
        expect(globalerror.windowHandleError).toHaveBeenCalled();
    });

しかし、それはonerrorを引き起こしません。私が調べた関連する質問がいくつかありますが、特定のブラウザー、または onerror をテストする方法ではなく、どのように/どこで使用するかについて尋ねているようです。
window.onerror が Firefoxで起動しない
Selenium で JavaScript エラーをキャプチャする
window.onerror が機能しない
Internet Explorer で script.onerror をトリガーする方法は?

それらのいくつかの発言に基づいて、デバッガーで仕様テストを実行すると、強制的に onerror がトリガーされると思いましたが、ダイスは発生しませんでした。これに対するより良いアプローチを知っている人はいますか?

4

2 に答える 2

3

私は最近、Jasmine に似たBuster.JSに基づく単体テストを備えた小さなJavaScript エラー ハンドラーを開発しました。

window.onerror を実行するテストは次のようになります。

  "error within the system": function (done) {

    setTimeout(function() {
      // throw some real-life exception
      not_defined.not_defined();
    }, 10);

    setTimeout(function() {
      assert.isTrue($.post.called);
      done();
    }, 100);
  }

テストの実行を停止せず、別の setTimeout で 100 ミリ秒後にスパイが呼び出されたことを確認し、done()Buster.JS で非同期機能をテストする方法を呼び出します。非同期テストで使用することにより、Jasmine でも同じアプローチを使用できます。done()

于 2013-10-22T17:23:41.397 に答える