Fre*_*oth 20 javascript unit-testing jasmine
我使用jasmine运行并等待测试异步操作.一切正常,但我不太确定幕后会发生什么.
jasmine文档说明了我添加了三个日志语句的以下示例.
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);
});
});
});
Run Code Online (Sandbox Code Playgroud)
});
第一个runs,waitsFor对我来说非常清楚.Runs启动异步操作并waitsFor等待一个条件.
但是我不明白为什么第二次runs没有开始直到waitsFor完成.这waitsFor不是阻止电话.
我的猜测是waitsFor隐式阻止任何后续runs调用,直到它完成.是这样吗?
我的证据是console.log语句输出:
BAC
但如果waitsFor真的会阻止它应该是
ABC
Sam*_*Sam 18
waitsFor 阻止,直到它等待的条件满足或超时.
从jasmine docs:"waitsFor()提供了一个更好的接口来暂停你的规范,直到其他一些工作完成.Masmine将等到提供的函数返回true,然后再继续下一个块."
链接的文档也有一个更清晰的例子或waitsFor.
编辑:啊,我明白你的意思了.waitsFor不会阻止JS未包裹在runs,waitsFor,等.
茉莉花正在做的是通过runs或传递给它的函数waitsFor,如果jasmine当前没有等待,它会立即执行该函数.如果等待,则在等待完成之前不会调用它.
这并没有阻止console.log它被传递给茉莉花,因此茉莉花不能阻止它被立即执行.