首先,下面的代码似乎可以工作。然而,我还没有看到任何人这样做,所以我想知道这是否合法,我是否错过了不可预见的不利因素。
上下文是我正在用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()都会一个接一个地运行。
将断言分解成更小的it块无疑是个好主意。Jasmine似乎没有只运行一次的全局设置功能。因此,也许你可以欺骗beforeEach块只运行一次设置:
describe("Homepage", function() {
var pageLoaded = false;
beforeEach(function() {
if ( ! pageLoaded) {
browser.get("/");
pageLoaded = true;
}
});
});
Jasmine2有beforeAll()和afterAll(),它们对整个套件运行一次。