【问题标题】:Calling beforeEach and afterEach with nested describe blocks使用嵌套的描述块调用 beforeEach 和 afterEach
【发布时间】:2016-10-21 02:40:33
【问题描述】:

我正在尝试在我正在编写的 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);
        });
    });
});

我发现我在 beforeEachafterEach 中的函数被我内部描述中的每个 it 调用。我只希望为我在外部描述中的每个内部描述调用一次。

这可能吗?

【问题讨论】:

    标签: javascript jasmine


    【解决方案1】:

    我认为你应该使用 'beforeAll' 和 'afterAll',用于描述中的规范。以下摘自茉莉花网站:http://jasmine.github.io/2.1/introduction.html

    beforeAll 函数在所有规范之前只调用一次 describe 运行,并且在所有规范之后调用 afterAll 函数 结束。这些功能可用于加速测试套件 昂贵的设置和拆卸。

    但是,使用 beforeAll 和 afterAll 时要小心!既然他们不是 在规格之间重置,很容易在规格之间意外泄漏状态 您的规格,以便它们错误地通过或失败。

    【讨论】:

    • 谢谢,但我已经看过这个文档,它对我的​​场景没有帮助
    • 我知道这已经晚了 4 年,但对于未来的读者来说,@Ram Pasala 所说的正是人们所需要的。那或者你可以把beforeEach放在父描述之外。
    【解决方案2】:

    为此,我定义了一个通用函数,然后在每个嵌套的describebeforeAll/afterAll 中引用它。

    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);
      });
    });
    

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

    【讨论】:

      猜你喜欢
      • 2019-01-03
      • 1970-01-01
      • 2014-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-23
      相关资源
      最近更新 更多