Подтвердить что ты не робот

Как повторно использовать beforeEach/afterEach в Jasmine JS?

При написании тестов с JasmineJS у меня есть много тестов, которые имеют аналогичный код beforeEach/afterEach.

Есть ли способ реализовать модель наследования с использованием тестовых наборов JasmineJS?

Я могу сгруппировать все тесты в одном describe, но в этом случае я завершу работу с одним HUGE JS файлом, содержащим все тесты.

Я хотел бы разделить тесты для каждой страницы.

Вот пример:

describe('Services Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/services')
    })

    if('Some test for services page', function() {})

    afterEach(function() {
        logout()
    })

})


describe('Administrators Page', function() {

    beforeEach(function() {
        login_as_admin()
    })

    beforeEach(function() {
        browser().navigateTo('/administrators')
    })

    if('Some test for administrators page', function() {})

    afterEach(function() {
        logout()
    })

})
4b9b3361

Ответ 1

Я думаю, что это частично рассмотрено в этом сообщении в блоге, а также ответил здесь но я добавляю адаптированный ответ для вашего примера:

Многоразовый код:

function sharedSetup(startPage) {
    beforeEach(function() {
        login_as_admin();
        browser().navigateTo(startPage);
    });

    afterEach(function() {
        logout();
    });
};

Как использовать его:

describe('Services Page', function() {
    sharedSetup('/services');

    it('Some test for services page', function() {});
});

describe('Administrators Page', function() {
    sharedSetup('/administrators');

    it('Some test for administrators page', function() {});
});

Ответ 2

Если вы хотите сделать это для всех своих наборов, вы можете зарегистрировать функцию beforeEach или afterEach в topSuite:

jasmine.getEnv().topSuite().beforeEach({fn: function() {
   //log in as admin
}});

Если вы хотите применить его только к некоторым наборам, вы можете работать с подпакетами:

describe("as_admin", function() {
  beforeEach(function() {
    //log in as admin
  });

  describe('Services Page',function() {...});
  describe('Administrators Page',function() {...});

}

Ответ 3

Жасмин позволяет вам помещать beforeEach и afterEach за пределы вызова describe. Таким образом, у вас может быть настройка и сглаживание, которые являются глобальными для всех ваших спецификаций. Ваш вызов logout() кажется, что он может быть хорошим кандидатом на глобальное отключение, и если все ваши спецификации войдут в систему как администратор, вы также можете перенести это в глобальную область.

Для вещей, которые используются в некоторых, но не для всех спецификациях, метод, подобный вашему login_as_admin(), кажется лучшим способом консолидировать эту логику в одном месте.

Ответ 4

Ссылка: (Блог Pivotal Labs: Дэвис У. Франк)

Он описывает сбор общих функций в функции, вызываемой с параметрами для разных отдельных наборов. Вызов этой функции в каждом пакете будет выполнять общую настройку/конфигурацию.

Что касается разделения тестов на файлы; файл с общей функцией может быть включен в каждую страницу с тегом <script>, если тесты основаны на браузере, или require(...) в верхней части, если тесты основаны на node. Затем вы можете запускать тесты самостоятельно, но используя эту общую настройку, которая определяется только один раз.