首先,下面的代码似乎可以工作。但是,我还没有看到有人这样做,所以我想知道这是否合法,以及我是否遗漏了无法预料的缺点。
上下文是我正在使用 Protractor 编写 E2E 测试,它使用 Jasmine 风格的 describe/it block 。我的目标是加载一个页面并运行一堆 it
测试 block ,而不是每次都重新加载该页面(因为它很耗时)。
我的构造是:
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
block 。我想以某种方式避免每次都运行 beforeEach 的问题,但仍然能够有一个很好分离的测试 block 集。
顺便说一句,我也试过这个:
describe("Homepage", function () {
browser.get("/"); //goes to homepage
it('elements', function () {
//run stuff 1
//run stuff 2
});
});
除非你有多个这样的规范,否则这不起作用。 browser.get() 在测试运行之前一个接一个地运行。
最佳答案
将断言分成更小的 it block 绝对是个好主意。 Jasmine 不需要只运行一次的全局设置函数。 所以也许你可以欺骗 beforeEach block 只运行一次设置:
describe("Homepage", function() {
var pageLoaded = false;
beforeEach(function() {
if ( ! pageLoaded) {
browser.get("/");
pageLoaded = true;
}
});
});
关于javascript - Protractor Jasmine 描述嵌套在 it block 中的 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575085/