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

confuse about the execution order of nested testing suite and specs

本文关键字:执行 顺序 套件 嵌套 测试      更新时间:2023-09-26

全部:

我刚开始关于Jasmine的第二天研究,有一个关于exe顺序的问题我想弄清楚:

这个例子来自Jasmine 2.0简介:Jasmine 2.0简介

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

有人能简单地解释一下茉莉花在相遇时会做什么吗?之前描述过每个人和它,以及它是如何运行的?

感谢

describe就像一个"测试范围",它用于确定必须在哪个it上执行beforeAll、afterAll、beforeEach和afterEach,它也可以简单地用于对测试进行分类,因为它有点像一个有标题的"章节"。

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

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

然后,"子"describe中的beforeEach在内部的每个测试用例之前执行,然后是内部的it,最后是afterEach,仅在子describe中的每个it之后执行。

总之,在您的示例中,函数按以下顺序执行:

beforeEach1 > it1 > beforeEach1 > beforeEach2 > it2 > afterEach

当您传递done参数时,jasmine"等待"它的执行,以继续进行下一个测试用例(it(。正如您在上一个案例中看到的,jasmine必须等待9000ms才能执行done():默认情况下,jasmin在5000ms之后超时,这就是为什么我们将其更改为10000。

我希望它是清楚的,如果还不够,请随时询问详细信息:(