В Protractor, как и в Jasmine, основным инструментом
для структурирования тестов являются блоки describe(). Они
позволяют логически объединять тестовые сценарии, облегчая организацию,
чтение и поддержку тестового кода.
describe()Синтаксис блока выглядит следующим образом:
describe('Описание тестового набора', function() {
it('Описание конкретного теста', function() {
// Тестовые действия и проверки
});
});
it) или вложенные
describe.describe()describe блоки могут быть вложенными,
что позволяет создавать многоуровневую иерархию тестов.
describe('Страница логина', function() {
describe('Форма авторизации', function() {
it('Должна успешно авторизовывать пользователя', function() {
// тест
});
it('Должна показывать ошибку при неверном пароле', function() {
// тест
});
});
describe('Ссылки на регистрацию', function() {
it('Переход к форме регистрации работает корректно', function() {
// тест
});
});
});
Преимущества вложенности:
beforeEach и
afterEach внутри конкретного блока.beforeAll, beforeEach, afterEach,
afterAllВнутри describe блоков можно использовать хуки для
подготовки и очистки окружения.
describe('Главная страница', function() {
beforeAll(function() {
browser.get('https://example.com');
});
beforeEach(function() {
browser.manage().deleteAllCookies();
});
afterEach(function() {
// действия после каждого теста, например, логирование
});
afterAll(function() {
// действия после всех тестов, например, закрытие соединений
});
it('Проверка заголовка страницы', function() {
expect(browser.getTitle()).toEqual('Example Domain');
});
});
Особенности:
beforeAll и afterAll выполняются один раз
для всего describe блока.beforeEach и afterEach выполняются перед
каждым тестом и после него соответственно.describe, при этом их
область действия ограничена блоком, в котором они объявлены.describe блоки формируют структуру тестового отчета.
Например, при использовании Protractor + Jasmine вывод
в консоль будет иметь вид:
Главная страница
Проверка заголовка страницы
Форма логина
Должна успешно авторизовывать пользователя
Должна показывать ошибку при неверном пароле
Вложенные блоки автоматически создают иерархию в отчетах, что облегчает анализ результатов тестирования.
describe должен описывать отдельный функциональный
модуль.describe,
чтобы они выполнялись для всех тестов.describe и it должны точно отражать
тестируемое поведение.В Protractor часто используются промисы и async/await. В
блоках describe можно определять тесты с асинхронным
поведением:
describe('Асинхронная форма', function() {
it('Должна корректно отправлять данные', async function() {
await element(by.id('input')).sendKeys('test');
await element(by.id('submit')).click();
const message = await element(by.id('success')).getText();
expect(message).toEqual('Данные отправлены');
});
});
Асинхронные тесты корректно интегрируются в структуру
describe, сохраняя последовательность выполнения и
логирование.
Эффективное использование describe блоков превращает
тесты в читаемую, поддерживаемую и логически структурированную
документацию по функционалу приложения. Каждый блок становится
мини-сценарием, а вложенные блоки позволяют детализировать проверки до
уровня отдельных компонентов или пользовательских сценариев.