使用嵌套的describe块调用beforeEach和afterEach

min*_*rse 13 javascript jasmine

我正在尝试在我正在编写的茉莉花测试套件的每个嵌套描述之前和之后调用一些逻辑.

我现在有类似的东西:

describe('Outer describe', function () {
    beforeEach(function () {
        login();
        someOtherFunc();
    });

    afterEach(function () {
        logout();
    });

    describe('inner describe', function () {
        it('spec A', function () {
                expect(true).toBe(true);
        });

        it('spec B', function () {
                expect(true).toBe(true);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

我在我的内心描述中找到了我的函数beforeEach并被afterEach调用it.我只希望在外部描述中对每个内部描述调用一次.

这可能吗?

Kyl*_*yle 6

为了实现这一点我限定了共同的功能,然后参考它在beforeAll/afterAll每个嵌套的describe

describe('Wrapper', function() {
  var _startup = function(done) {
    login();
    window.setTimeout(done, 150);
  };

  var _shutdown = function() {
    logout();
  };

  describe('Inner 1', function() {
    beforeAll(_startup);
    afterAll(_shutdown);
  });

  describe('Inner 2', function() {
    beforeAll(_startup);
    afterAll(_shutdown);
  });

  describe('Inner 3', function() {
    beforeAll(_startup);
    afterAll(_shutdown);
  });
});
Run Code Online (Sandbox Code Playgroud)

这似乎是最干净的解决方案。


Ram*_*ala 5

我认为您应该在描述中使用“ beforeAll”和“ afterAll”作为规范。以下摘自茉莉花网站:http : //jasmine.github.io/2.1/introduction.html

在运行describe中的所有规范之前,仅调用一次beforeAll函数,而在所有规范完成之后,则调用afterAll函数。这些功能可用于通过昂贵的设置和拆卸来加快测试套件的速度。

但是,请小心使用beforeAll和afterAll!由于未在规格之间重置它们,因此很容易意外泄漏规格之间的状态,从而使它们错误地通过或失败。

  • 谢谢,但我已经看过这个文档,它对我的​​场景没有帮助 (2认同)
  • 我知道已经晚了 4 年,但对于未来的读者来说,@Ram Pasala 所说的正是人们所需要的。或者您可以将“beforeEach”放在父描述之外。 (2认同)