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

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

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

Я могу сгруппировать все тесты в одномdescribe но в этом случае я закончу одним огромным файлом 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()
    })

})
 xst15 мая 2014 г., 19:47
будет ли каждая страница иметьlogin_as_admin() а также ?logout()

Ответы на вопрос(4)

Блог Pivotal Labs: Дэвис В. Фрэнк)

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

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

Решение Вопроса

в этом блоге а такжеответил здесь но я'm добавив адаптированный ответ для вашего примера:

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

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() {});
});

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

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

вы можете зарегистрировать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() {...});

}
 rajsite22 июн. 2016 г., 22:53
Я думаю, что также можно использовать: jasmine.getEnv (). BeforeEach (function () {// войти в систему как администратор}); на основе тестов, включенных в изменения здесь:github.com/jasmine/jasmine/issues/811
 Vanuan28 сент. 2017 г., 01:40
Похоже на то'важно позвонитьdone() обратный звонок вbeforeEach как висит без него.

Ваш ответ на вопрос