Транспортир Jasmine описывает блоки, вложенные в IT-блок

во-первых, приведенный ниже код, кажется, работает. Тем не менее, я еще не видел, чтобы кто-то делал это, поэтому мне интересно, является ли это законным, и если я упускаю непредвиденные недостатки.

контекст заключается в том, что я пишу тест E2E с транспортиром, который использует блоки описания/it в стиле Jasmine. Моя цель-загрузить страницу и запустить кучу 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

    });
});

кроме того, это не работает, когда у вас есть несколько спецификаций, как это. Этот браузер.get () все запускаются один за другим до запуска тестов.

2 ответов


разбиение утверждений на меньшие блоки it-определенно хорошая идея. Жасмин не appead иметь глобальную функцию установки, который запускается только один раз. Поэтому, возможно, вы можете обмануть блок beforeEach, запустив установку только один раз:

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

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

Jasmine2 имеет beforeAll () и afterAll (), который выполняется один раз для всего набора.