Транспортир 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;
        }
    });
});