9

首先,下面的代码似乎工作。但是,我还没有看到有人这样做,所以我想知道这是否合法,以及我是否错过了不可预见的缺点。

上下文是我正在用 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() 在测试运行之前一个接一个地运行。

4

2 回答 2

7

将断言分解成更小的 it 块绝对是一个好主意。Jasmine 不具备只运行一次的全局设置功能。所以也许你可以欺骗 beforeEach 块只运行一次设置:

describe("Homepage", function() {
    var pageLoaded = false;

    beforeEach(function() {
        if ( ! pageLoaded) {
            browser.get("/");
            pageLoaded = true;
        }
    });
});
于 2013-12-13T20:26:46.910 回答
4

Jasmine2 有 beforeAll() 和 afterAll() 为整个套件运行一次。

于 2015-05-19T10:36:47.393 回答