Javascript jasmine跑步和等待到底是做什么的?
我使用jasmine运行并等待测试异步操作。一切正常,但我不太清楚幕后发生了什么 jasmine文档说明了我添加了三个log语句的以下示例Javascript jasmine跑步和等待到底是做什么的?,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我使用jasmine运行并等待测试异步操作。一切正常,但我不太清楚幕后发生了什么 jasmine文档说明了我添加了三个log语句的以下示例 describe("Asynchronous specs", function() { var value, flag; it("should support async execution of test preparation and exepectations", function() { runs(function() {
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);
});
});
});
}))
第一次运行和等待对我来说非常清楚<代码>运行启动异步操作并等待等待条件
但是,我不明白为什么第二个运行
直到等待
完成后才开始。waitsFor
不是阻塞调用
我猜想,waitsFor
会隐式阻止任何后续的运行
调用,直到调用完成。是这样吗
我的证据是console.log语句输出:
B A C
但是如果waitsFor
真的会阻塞,它应该是
等待的B C会一直阻塞,直到它等待的条件得到满足或超时为止 来自:“waitsFor()提供了一个更好的接口,用于暂停您的规范,直到其他工作完成。Jasmine将等待所提供的函数返回true,然后继续执行下一个块。” 链接的文档也有一个稍微清晰的示例或
等待
编辑:啊,我现在明白你的意思了waitsFor
不会阻止未包装在runs
,waitsFor
等中的JS
jasmine所做的是获取通过运行
或等待
传递给它的函数,如果jasmine当前没有等待,它会立即执行该函数。如果它正在等待,它不会调用它,直到它完成等待
这不会停止控制台的运行,因为它已经传递给jasmine,所以jasmine无法阻止它立即执行。解决方案在文档中: 等级库中的多个runs()块将连续运行。() 从网站: Jasmine将按照您指定的顺序调用runs()和waitsFor()方法 通过他们。一旦JS解析器到达waitsFor()方法,它就会 将轮询它,直到它返回true,然后才继续 next runs()方法 本质上,runs()和waitsFor()函数用它们提供的函数填充数组。然后由jamine处理该数组,其中函数按顺序调用。由runs()注册的函数应执行实际工作,而由waitsFor()注册的函数应为“闩锁”函数,并将每隔10毫秒轮询(调用)一次,直到返回true或可选的注册超时期限到期。如果超时期限到期,则使用可选的已注册错误消息报告错误;否则,进程将继续执行数组中的下一个函数。据推测,runs()中的expect也可能触发故障报告(甚至可能在闩锁函数本身中)
文档中对这些异步特性的描述特别迟钝。我很确定情况并非如此。您在
waitsFor
和第二次run
之间放置了一条语句,它将在waitsFor
中的代码之前执行。我将更新我的问题以反映这一点。但感谢指向文档的链接,我不知道:)再次感谢,答案在文档中,但不完全是您所指的:)“waitsFor”不仅会阻塞直到满足条件,而且还会在传递给它的函数中每隔10毫秒运行一次代码。记住这一点很有用。Jasmine 1.3提供了waitsFor方法(而不是waitFor),答案应该被更正。