茉莉花运行和等待实际上做什么? [英] What do jasmine runs and waitsFor actually do?

查看:138
本文介绍了茉莉花运行和等待实际上做什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用jasmine运行并等待测试异步操作。一切正常,但我不太确定幕后发生了什么。

I use jasmine runs and wait to test asynchronous operations. Everything works fine but I'm not quite sure what goes on behind the scenes.

jasmine文档说明了我添加了三个日志语句的以下示例。

The jasmine documentation states the following example to which I added three log statement.

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 等待条件。

The first runs and waitsFor are perfectly clear to me. Runs starts an asynchronous operation and waitsFor waits for a condition.

但是我不明白为什么第二个运行 waitsFor 完成后才会启动。 waitsFor 不是阻止调用。

However I do not understand why the second runs does not start until the waitsFor is finished. The waitsFor is not a blocking call.

我的猜测是 waitsFor 隐式阻止以下任何运行打电话直到完成。是这样吗?

My guess is that waitsFor implicitly blocks any following runs call until it is finished. Is this so?

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

My evidence is that the console.log statements output:

BAC

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

But if waitsFor would really block it should be

ABC

推荐答案

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

waitsFor does block until the conditions it's waiting for are met or it times out.

来自 jasmine docs :waitsFor()提供了一个更好的界面来暂停你的规范,直到其他一些工作完成.Masmine将等到提供的函数返回true,然后再继续下一个块。。

From the jasmine docs: "waitsFor() provides a better interface for pausing your spec until some other work has completed. Jasmine will wait until the provided function returns true before continuing with the next block.".

链接的文档也有一个更清晰的例子或 waitsFor

The linked docs also have a slightly clearer example or waitsFor.

编辑:啊,我明白你的意思了。 waitsFor 不会阻止未包含在中的JS waitsFor ,等等。

EDIT: Ah I see what you mean now. waitsFor won't block JS that isn't wrapped in runs, waitsFor, ect.

茉莉花正在做的是通过运行 waitsFor 如果jasmine当前没有等待,它会立即执行该函数。如果等待,则在等待完成之前不会调用它。

What jasmine is doing is taking the function passed to it via runs or waitsFor and if jasmine is not currently waiting, it executes the function immediately. If it is waiting, it doesn't call it until it's finished waiting.

这不会停止 console.log 因为它被传递给茉莉花,所以茉莉花不能阻止它立即被执行。

That doesn't stop the console.log as it's been passed to jasmine so jasmine can't prevent it from being executed straight away.

这篇关于茉莉花运行和等待实际上做什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆