首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >jasmine运行什么,而waitsFor实际做什么?

jasmine运行什么,而waitsFor实际做什么?
EN

Stack Overflow用户
提问于 2013-05-06 21:40:53
回答 3查看 26K关注 0票数 21

我使用jasmine run和wait来测试异步操作。一切都很好,但我不太确定幕后发生了什么。

jasmine文档说明了下面的示例,我在其中添加了三条log语句。

代码语言:javascript
复制
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等待一个条件。

然而,我不明白为什么第二个runs直到waitsFor完成后才启动。waitsFor不是阻塞调用。

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

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

B、A、C

但如果waitsFor真的想阻止它,它应该是

A、B、C

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-06 23:25:22

waitsFor确实会阻塞,直到它等待的条件得到满足或超时。

jasmine docs中:"waitsFor()提供了一个更好的接口来暂停您的规范,直到其他工作完成。Jasmine将等待所提供的函数返回true,然后再继续下一个代码块。“

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

编辑:啊,我现在明白你的意思了。waitsFor不会阻止没有包装在runswaitsFor等中的JS。

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

这并不能阻止console.log,因为它已经传递给了jasmine,所以jasmine不能阻止它立即被执行。

票数 19
EN

Stack Overflow用户

发布于 2013-05-06 23:50:12

文档中提供了解决方案:

一个规范中的多个

()块将串行运行。(Jasmine Documentation)

票数 4
EN

Stack Overflow用户

发布于 2013-08-14 00:26:23

来自网站:http://www.htmlgoodies.com/beyond/javascript/test-asynchronous-methods-using-the-jasmine-runs-and-waitfor-methods.html#fbid=mzNDUVfhFXg

runs将按照您传递的顺序调用

()和waitsFor()方法。一旦JS解析器获得waitsFor()方法,它就会对其进行轮询,直到返回true,然后才会继续执行下一个runs()方法。

本质上,runs()和waitsFor()函数用它们提供的函数填充数组。然后,该数组由jamine处理,其中函数被顺序调用。由runs()注册的那些函数应该执行实际的工作,而由waitsFor()注册的那些函数应该是“闩锁”函数,并且将每10ms轮询(调用)一次,直到它们返回true或可选的注册超时期限到期。如果超时时间到期,则使用可选的已注册错误消息报告错误;否则,该过程将继续执行数组中的下一个函数。据推测,run()中的expect也会触发失败报告(甚至可能是在闩锁函数本身中)。

文档中对这些异步特性的描述特别生硬。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16400047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档