Вызов beforeEach и afterEach с вложенными блоками описания
Я пытаюсь заставить некоторую логику вызываться до и после каждого вложенного описания набора тестов для жасмина, который я пишу.
У меня сейчас есть что-то вроде этого:
describe('Outer describe', function () {
beforeEach(function () {
login();
someOtherFunc();
});
afterEach(function () {
logout();
});
describe('inner describe', function () {
it('spec A', function () {
expect(true).toBe(true);
});
it('spec B', function () {
expect(true).toBe(true);
});
});
});
Я нахожу свои функции в beforeEach
и afterEach
для каждого it
внутри моего внутреннего описания. Я хочу, чтобы они вызывались только один раз для каждого внутреннего описания, которое я имею во внешнем.
Это возможно?
Ответы
Ответ 1
Я думаю, вы должны использовать "beforeAll" и "afterAll" для спецификаций внутри описания. следующее взято из веб-сайта жасмина: http://jasmine.github.io/2.1/introduction.html
Функция beforeAll вызывается только один раз перед запуском всех спецификаций в описании, а функция afterAll вызывается после завершения всех спецификаций. Эти функции могут использоваться для ускорения комплектов тестов с дорогостоящей настройкой и срывом.
Однако будьте осторожны, используя beforeAll и afterAll! Поскольку они не являются reset между спецификациями, легко случайно протекать состояние между вашими спецификациями, чтобы они ошибочно проходили или терпели неудачу.
Ответ 2
Для этого я определяю общую функцию и затем ссылаюсь на нее в beforeAll
/afterAll
каждого вложенного describe
.
describe('Wrapper', function() {
var _startup = function(done) {
login();
window.setTimeout(done, 150);
};
var _shutdown = function() {
logout();
};
describe('Inner 1', function() {
beforeAll(_startup);
afterAll(_shutdown);
});
describe('Inner 2', function() {
beforeAll(_startup);
afterAll(_shutdown);
});
describe('Inner 3', function() {
beforeAll(_startup);
afterAll(_shutdown);
});
});
Кажется, это самое чистое из доступных решений.