45

使用 JasmineJS 编写测试时,我有许多测试具有类似的 beforeEach/afterEach 代码。

有没有办法使用 JasmineJS 测试套件实现继承模型?

我可以将所有测试归为一个describe,但在这种情况下,我将以一个包含所有测试的 HUGE JS 文件结束。

我想拆分每个页面的测试。

这是一个例子:

describe('Services Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/services')
    })

    if('Some test for services page', function() {})

    afterEach(function() {
        logout()
    })

})


describe('Administrators Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/administrators')
    })

    if('Some test for administrators page', function() {})

    afterEach(function() {
        logout()
    })

})
4

4 回答 4

46

我认为在这篇博文中对此进行了部分检查,并在此处进行了回答,但我正在为您的示例添加一个经过调整的答案:

可重用代码:

function sharedSetup(startPage) {
    beforeEach(function() {
        login_as_admin();
        browser().navigateTo(startPage);
    });

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

如何使用它:

describe('Services Page', function() {
    sharedSetup('/services');

    it('Some test for services page', function() {});
});

describe('Administrators Page', function() {
    sharedSetup('/administrators');

    it('Some test for administrators page', function() {});
});
于 2014-06-04T19:33:25.777 回答
22

如果您想为所有套件执行此操作,您可以在以下位置注册一个beforeEachafterEach函数topSuite

jasmine.getEnv().topSuite().beforeEach({fn: function() {
   //log in as admin
}});

如果您只想将其应用于某些套件,则可以使用子套件:

describe("as_admin", function() {
  beforeEach(function() {
    //log in as admin
  });

  describe('Services Page',function() {...});
  describe('Administrators Page',function() {...});

}
于 2015-05-13T09:03:13.923 回答
5

Jasmine 确实允许您在通话beforeEach之外afterEach进行describe通话。通过这种方式,您可以对所有规格进行全局设置和拆卸。您的logout()调用似乎是全局拆卸的一个很好的候选者,如果您的所有规范都以管理员身份登录,您也可以将其移至全局范围。

对于某些(但不是全部)规范中使用的东西,拥有像您这样的方法login_as_admin()似乎是将这种逻辑整合到一个地方的最佳方式。

于 2014-01-25T20:27:11.110 回答
1

参考:(Pivotal Labs 博客:Davis W. Frank

他描述了在一个函数中收集共享功能,该函数使用不同的单独套件的参数调用。在每个套件中调用此函数将执行通用设置/配置。

至于跨文件拆分测试;如果测试是基于浏览器的,则具有共享功能的文件可以包含在每个页面中并带有<script>标签,或者require(...)如果测试是基于节点的,则可以包含在顶部附近。然后,您可以独立运行测试,但使用仅定义一次的共享设置。

于 2014-05-15T18:05:28.893 回答