Javascript 量角器Jasmine描述嵌套在it块中的块

Javascript 量角器Jasmine描述嵌套在it块中的块,javascript,angularjs,testing,jasmine,protractor,Javascript,Angularjs,Testing,Jasmine,Protractor,首先,下面的代码似乎有效。然而,我还没有看到任何人这样做,所以我想知道这是否合法,我是否错过了不可预见的不利因素 上下文是我正在用量角器编写一个E2E测试,它使用Jasmine风格的descripe/it块。我的目标是加载一个页面并运行一系列it测试块,而无需每次重新加载该页面(因为它很耗时) 我的构想是: describe("Homepage", function () { beforeEach(function () { browser.get("/"); //lo

首先,下面的代码似乎有效。然而,我还没有看到任何人这样做,所以我想知道这是否合法,我是否错过了不可预见的不利因素

上下文是我正在用量角器编写一个E2E测试,它使用Jasmine风格的descripe/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
块。我想以某种方式避免每次之前都运行的问题,但仍然能够有一组很好地分离的测试块


顺便说一下,我也试过:

describe("Homepage", function () {

    browser.get("/"); //goes to homepage

    it('elements', function () {
        //run stuff 1
        //run stuff 2

    });
});

但是,当您有多个这样的规格时,这不起作用。在测试运行之前,browser.get()都会一个接一个地运行。

将断言分解为更小的it块绝对是个好主意。 Jasmine似乎没有只运行一次的全局设置功能。 因此,您可以欺骗beforeach块,使其只运行一次安装程序:

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

    beforeEach(function() {
        if ( ! pageLoaded) {
            browser.get("/");
            pageLoaded = true;
        }
    });
});

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

这是个好主意。让我等一两天再接受,看看是否还有其他人有什么想法。我还想为
browser.get()
这个特定场景添加内容。您还可以使用
browser.getCurrentUrl()
检查当前页面,然后再“获取”它。