混淆嵌套测试套件和规范的执行顺序

时间:2015-09-15 22:20:19

标签: javascript testing jasmine

所有

我刚开始关于Jasmine的第二天研究,有一个关于exe命令的问题我想弄明白:

这个例子来自Jasmine 2.0的介绍: Jasmine 2.0 Introduction

describe("Asynchronous specs", function() {
  var value;
  beforeEach(function(done) {
    setTimeout(function() {
      value = 0;
      done();
    }, 1);
  });
  it("should support async execution of test preparation and expectations", function(done) {
    value++;
    expect(value).toBeGreaterThan(0);
    done();
  });
  describe("long asynchronous specs", function() {
    var originalTimeout;
    beforeEach(function() {
      originalTimeout = jasmine.DEFAULT_TIMEOUT_INTERVAL;
      jasmine.DEFAULT_TIMEOUT_INTERVAL = 10000;
    });
    it("takes a long time", function(done) {
      setTimeout(function() {
        done();
      }, 9000);
    });
    afterEach(function() {
      jasmine.DEFAULT_TIMEOUT_INTERVAL = originalTimeout;
    });
  });
});

我试过阅读源代码,但这只会让我更加困惑,甚至会混淆我不理解的部分...... ToT

任何人都可以简单地解释一下茉莉花在遇到之前描述了什么,以及它如何运行以及它是如何运行的?

由于

1 个答案:

答案 0 :(得分:3)

describe就像一个“测试范围”,它用于确定在{All}之前,之后,之前和之后必须执行的it,它还可以简单地用于对测试进行分类因为它有点像“章节”,带有标题。

第一个beforeEach在第一个it(以及describe个孩子)中的每个describe之前执行。

第一个it可以在没有done参数的情况下编写,因为它只包含同步操作。

然后“child”beforeEach中的describe在每个测试用例内部执行,然后it内部,最后afterEach仅在每个测试用例之后执行it在孩子内部describe

总结一下,在你的例子中,函数按以下顺序执行:

beforeEach1 > it1 > beforeEach1 > beforeEach2 > it2 > afterEach

当你传递done参数时,jasmine“等待”它的执行以继续下一个测试用例(it)。正如您在上一个案例中所看到的,jasmine必须等待9000ms才能执行done():默认情况下,5000毫秒后的茉莉花超时,这就是我们将其更改为10000的原因。

我希望很清楚,如果还不够,请随时询问详情:)