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.
asyncTest
:(. Btw,onload
should be replaced byload
as we're dealing with ajquery
object there for whichonload
is not defined. – Rea