7

URLをテスト画像の属性として設定し、イベントハンドラーでそれがうまくいったかどうかを確認することで、画像URLsを検証しようとしています。これまでのところ、私が持っているのは:Qunitsrcerror

test('image',function() {
    var test_image = $('#test-image');
    test_image.error(function(e) { // properly triggered
        console.log(e);             
        is_valid = false;
        // ok(false,'Issue loading image'); breaks qunit
    });
    var is_valid = true;
    test_image.attr('src','doesntexist');
    console.log('checking is_valid');  // occurs before error event handler
    if (is_valid) {  // therefore always evaluates to the same
        ok(true,'Image properly loaded');
    } else {
        ok(false,'Issue loading image');
    }
});

私の問題は、errorイベントが適切にトリガーされても、非同期で発生しているように見え、の評価後に発生することですis_valid(したがって、どのようなチェックを行っても、結果は常に同じになります)。ok()イベントハンドラー内にアサーションを追加しようとしましたerrorが、次のエラーが発生します。

Error: ok() assertion outside test context

errorイベントハンドラー内で実行された処理に基づいてアサーションを実行するにはどうすればよいですか?

PS:alert('test');チェックする前にaを挿入すると、is_valid正常に動作します(これにより、エラーハンドラが非同期であるという問題が確認されます)が、ご想像のとおり、受け入れられません。ifステートメントの実行を遅らせるためにを使用しようとしsetTimeoutましたが、同じアサーションコンテキストエラーが発生します。

4

1 に答える 1

8

QUnit APIをざっと見てみるとasyncTest、このために関数を使用する必要があることがわかります。のsrc属性を設定する前に、関数をイベントtest_imageにフックします。loadテストされていないコードは次のとおりです。

asyncTest('image',function() {
    var test_image = $('#test-image');
    test_image.error(function(e) {
        console.log(e);             
        ok(false,'Issue loading image');
        start();
    });
    test_image.load(function() {
        ok(true,'Image properly loaded');
        start();
    });
    test_image.attr('src','doesntexist');
});
于 2012-08-02T12:02:38.110 に答える