gpt4 book ai didi

javascript - jasmine running 和 waitsFor 实际上做了什么?

转载 作者:行者123 更新时间:2023-12-03 00:00:44 26 4
gpt4 key购买 nike

我使用 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);
});
});
});

});

第一个 runswaitsFor 对我来说非常清楚。 Runs 启动异步操作,waitsFor 等待条件。

但是我不明白为什么第二个 runswaitsFor 完成之前才开始。 waitsFor 不是阻塞调用。

我的猜测是 waitsFor 隐式阻止任何后续的 runs 调用,直到它完成。是这样吗?

我的证据是 console.log 语句输出:

BAC

但是如果waitsFor真的会阻塞它应该是

ABC

最佳答案

waitsFor 会阻塞,直到满足其等待的条件或超时。

来自jasmine docs :“waitsFor() 提供了一个更好的接口(interface),用于暂停您的规范,直到其他工作完成。Jasmine 将等到提供的函数返回 true,然后再继续下一个 block 。”。

链接的文档还有一个稍微清晰一些的示例或 waitsFor

编辑:啊,我现在明白你的意思了。 waitsFor 不会阻塞未封装在 runswaitsFor 等中的 JS。

Jasmine 正在做的是获取通过runswaitsFor传递给它的函数,如果 Jasmine 当前没有等待,它会立即执行该函数。如果正在等待,则在等待完成之前不会调用它。

这不会停止 console.log,因为它已传递给 jasmine,因此 jasmine 无法阻止它立即执行。

关于javascript - jasmine running 和 waitsFor 实际上做了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16400047/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com