I'm trying to validate image URLs
with Qunit
by setting the URL as the src
attribute of a test image and checking with the error
event handler whether that went well. So far what I have is:
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');
}
});
My problem is that although the error
event is properly triggered, it seems to occur in an asynchronous fashion and after the evaluation of is_valid
(therefore whatever check I make, the result will always be the same). I have tried adding the ok()
assertion inside the error
event handler, but I'm getting the following error:
Error: ok() assertion outside test context
How can I run an assertion based on the processing performed inside the error
event handler?
PS: if I insert a alert('test');
before checking is_valid
it works fine (which confirms problem with error handler being asynchronous) but as you can imagine is not acceptable. I tried using setTimeout
to delay execution of if statement but it brings the same assertion context error.
I'm trying to validate image URLs
with Qunit
by setting the URL as the src
attribute of a test image and checking with the error
event handler whether that went well. So far what I have is:
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');
}
});
My problem is that although the error
event is properly triggered, it seems to occur in an asynchronous fashion and after the evaluation of is_valid
(therefore whatever check I make, the result will always be the same). I have tried adding the ok()
assertion inside the error
event handler, but I'm getting the following error:
Error: ok() assertion outside test context
How can I run an assertion based on the processing performed inside the error
event handler?
PS: if I insert a alert('test');
before checking is_valid
it works fine (which confirms problem with error handler being asynchronous) but as you can imagine is not acceptable. I tried using setTimeout
to delay execution of if statement but it brings the same assertion context error.
1 Answer
Reset to default 8By quickly looking through QUnit API, I see that you should use asyncTest
function for this. Before setting the src-attribute for your test_image
, hook a function to load
event. Here's an untested code:
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');
});
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745352631a4623927.html
评论列表(0条)