I use jasmine runs and wait to test asynchronous operations. Everything works fine but I'm not quite sure what goes on behind the scenes.
The jasmine documentation states the following example to which I added three log statement.
describe(Asynchronous specs, function() {
var value, flag;
it(should support async execution of test preparation and exepectations, function() {
runs(function() {
flag = false;
value = 0;
setTimeout(function() {
flag = true;
}, 500);
});
waitsFor(function() {
value++;
if(flag) {
console.log(A);
}
return flag;
}, The Value should be incremented, 750);
console.log(B);
runs(function() {
console.log(C);
expect(value).toBeGreaterThan(0);
});
});
});
});
The first runs
and waitsFor
are perfectly clear to me. Runs
starts an asynchronous operation and waitsFor
waits for a condition.
However I do not understand why the second runs
does not start until the waitsFor
is finished. The waitsFor
is not a blocking call.
My guess is that waitsFor
implicitly blocks any following runs
call until it is finished. Is this so?
My evidence is that the console.log statements output:
B A C
But if waitsFor
would really block it should be
A B C