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事件处理程序内部执行的处理运行断言?

alert('test');PS:如果我在检查之前插入 a ,is_valid它可以正常工作(这证实了错误处理程序是异步的问题),但您可以想象这是不可接受的。我尝试使用setTimeout延迟执行 if 语句,但它带来了相同的断言上下文错误。

4

1 回答 1

8

通过快速浏览 QUnit API,我发现您应该asyncTest为此使用函数。在为您的 src 设置 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 回答