如何在Jasmine JS中重用beforeEach/afterEach?

Adi*_*ban 38 javascript testing dry jasmine

使用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()
    })

})
Run Code Online (Sandbox Code Playgroud)

Leo*_*cci 37

我认为这部分内容已在本博文中进行部分检查,在此处回答,但我为您的示例添加了一个改编的答案:

可重复使用的代码:

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

    afterEach(function() {
        logout();
    });
};
Run Code Online (Sandbox Code Playgroud)

如何使用它:

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() {});
});
Run Code Online (Sandbox Code Playgroud)


Ste*_*ven 18

如果您想为所有套房执行此操作,您可以在以下位置注册beforeEachafterEach执行以下操作topSuite:

jasmine.getEnv().topSuite().beforeEach({fn: function() {
   //log in as admin
}});
Run Code Online (Sandbox Code Playgroud)

如果您只想在某些套件上应用它,则可以使用子套件:

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

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

}
Run Code Online (Sandbox Code Playgroud)


Gre*_*egg 5

Jasmine 确实允许您放置beforeEachafterEach退出describe呼叫。通过这种方式,您可以对所有规格进行全局设置和拆卸。您的logout()电话似乎很适合全局拆卸,如果您的所有规范都以管理员身份登录,您也可以将其移至全局范围。

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