茉莉花运行和等待实际上做什么?

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它被传递给茉莉花,因此茉莉花不能阻止它被立即执行.