Używam jaśminów i czekam na testy operacji asynchronicznych. Wszystko działa dobrze, ale nie jestem do końca pewien, co dzieje się za kulisami.Co jaśmin działa i czeka?
W dokumentacji jaśminu podano następujący przykład, do którego dodałem trzy instrukcje dziennika.
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);
});
});
});
});
Pierwsze runs
i waitsFor
są dla mnie zupełnie jasne. Runs
uruchamia operację asynchroniczną, a waitsFor
czeka na warunek.
Jednak nie rozumiem, dlaczego drugi runs
nie rozpocznie się, dopóki nie zostanie zakończone waitsFor
. waitsFor
nie jest połączeniem blokującym.
Domyślam się, że waitsFor
niejawnie blokuje każde następne wywołanie runs
, dopóki nie zostanie zakończone. Czy tak jest?
Mam dowody, że console.log wyjście oświadczenia:
BAC
Ale jeśli waitsFor
naprawdę zablokować powinny być
ABC
Jestem pewien, że tak nie jest. Umieszczasz instrukcję pomiędzy 'waitsFor' i drugim' run', które zostaną wykonane przed kodem w 'waitFor'. Zaktualizuję moje pytanie, aby to odzwierciedlić. –
Ale dzięki za link do dokumentacji, nie wiedziałem o tym :) –
I jeszcze raz dziękuję, odpowiedź jest w dokumentach, ale nie całkiem, gdzie wskazałeś :) –