首先,以下代码似乎有效。但是,我还没有看到有人这样做,所以我想知道这是否合法,如果我错过了不可预见的缺点。
上下文是我正在使用Protractor编写E2E测试,该测试使用Jasmine风格的describe / it块。我的目标是加载页面并运行一堆it
测试块,而不是每次都重新加载该页面(因为它很耗时)。
我的构造是:
describe("Homepage", function () {
beforeEach(function () {
browser.get("/"); //loads the page
});
it('elements', function () {
describe('test group', function () {
it('test 1', function () {
//run stuff 1
});
it('test2', function () {
//run stuff 2
});
})
});
});
我意识到另一种选择就是这样做:
describe("Homepage", function () {
beforeEach(function () {
browser.get("/"); //goes to homepage
});
it('elements', function () {
//run stuff 1
//run stuff 2
});
});
但问题是我无法将测试分开,最终导致大it
块。我想以某种方式避免每次运行beforeEach的问题,但仍然能够有一个很好的分离设置测试块。
顺便说一句,我也试过了:
describe("Homepage", function () {
browser.get("/"); //goes to homepage
it('elements', function () {
//run stuff 1
//run stuff 2
});
});
除非当您有多个这样的规格时,这不起作用。在测试运行之前,browser.get()都会一个接一个地运行。
答案 0 :(得分:7)
将断言分解为更小的块绝对是一个好主意。 Jasmine没有附加只运行一次的全局设置功能。 所以也许你可以欺骗beforeEach块只运行一次设置:
describe("Homepage", function() {
var pageLoaded = false;
beforeEach(function() {
if ( ! pageLoaded) {
browser.get("/");
pageLoaded = true;
}
});
});
答案 1 :(得分:3)
Jasmine2有beforeAll()和afterAll(),它为整个套件运行一次。