E2E-тестирование (end-to-end testing) в контексте веб-разработки представляет собой метод проверки всей функциональности приложения с точки зрения конечного пользователя. Это позволяет убедиться в том, что все части системы работают как ожидается, начиная от пользовательского интерфейса до базы данных и серверной логики. Для проведения таких тестов на веб-страницах и приложениях часто используется автоматизированное тестирование. Одним из элементов, который может быть протестирован в процессе E2E-тестирования, являются всплывающие окна и уведомления, такие как те, которые предоставляет библиотека SweetAlert.
SweetAlert — это библиотека JavaScript, предназначенная для создания красивых и информативных всплывающих окон (модальных окон) с разнообразными функциями. Она значительно упрощает создание интерфейсов с использованием пользовательских уведомлений. Чтобы провести качественное E2E-тестирование приложения, важно не только убедиться в том, что функции библиотеки работают, но и протестировать корректность их взаимодействия с остальными частями веб-приложения.
Для того чтобы провести E2E-тестирование с использованием SweetAlert, первым шагом будет подготовка рабочего окружения. На практике для таких целей часто используют инструменты для автоматизации браузеров, такие как Cypress или Puppeteer. Эти инструменты позволяют программно взаимодействовать с веб-страницей, эмулировать действия пользователя и проверять поведение интерфейса.
Дополнительно потребуется настроить тестовое окружение для имитации различных сценариев, таких как успешное и неуспешное выполнение операции, отображение различных типов уведомлений (успех, ошибка, предупреждение) и т.д.
Примерно следующая последовательность шагов будет использоваться при настройке E2E-тестирования с использованием Cypress:
Установка зависимостей через NPM или Yarn:
npm install cypress --save-dev
npm install sweetalert2 --saveИмпорт библиотеки SweetAlert в проект:
import Swal from 'sweetalert2';Настройка Cypress для запуска тестов. Обычно это включает
настройку cypress.json для указания базового URL и путей
для тестов.
После подготовки окружения следующим этапом будет создание простого
теста для базового уведомления с использованием SweetAlert. Простейшее
уведомление может быть вызвано с помощью вызова метода
Swal.fire(), который отображает модальное окно. Этот тест
может включать проверку правильности отображения окна и его
взаимодействие с пользователем.
Пример базового теста:
it('Показывает уведомление об успехе', () => {
cy.visit('/'); // Открыть главную страницу
// Инициация события, которое вызывает уведомление
cy.window().then((win) => {
win.Swal.fire('Успех!', 'Операция прошла успешно!', 'success');
});
// Проверка отображения уведомления
cy.get('.swal2-popup').should('be.visible');
cy.get('.swal2-title').should('contain', 'Успех!');
});
В данном примере:
Swal.fire().SweetAlert предоставляет несколько типов уведомлений:
success, error, warning,
info. Для каждого из этих типов можно создать отдельные
тесты, чтобы убедиться, что отображаемое окно имеет соответствующий
стиль и содержание.
Пример теста для уведомления об ошибке:
it('Показывает уведомление об ошибке', () => {
cy.visit('/');
// Инициация события с ошибкой
cy.window().then((win) => {
win.Swal.fire('Ошибка!', 'Произошла непредвиденная ошибка.', 'error');
});
// Проверка наличия элемента с классом ошибки
cy.get('.swal2-popup').should('be.visible');
cy.get('.swal2-icon--error').should('exist');
cy.get('.swal2-title').should('contain', 'Ошибка!');
});
Здесь:
error.SweetAlert поддерживает кастомизацию кнопок, позволяя задать их текст, стиль, а также поведение при их нажатии. В рамках E2E-тестирования важно проверять не только отображение уведомлений, но и реакции на действия пользователя.
Пример теста с кастомными кнопками:
it('Проверка работы кнопок в уведомлении', () => {
cy.visit('/');
// Инициация кастомного уведомления с кнопками
cy.window().then((win) => {
win.Swal.fire({
title: 'Удалить элемент?',
text: 'Вы уверены, что хотите удалить этот элемент?',
icon: 'warning',
showCancelButton: true,
confirmButtonText: 'Удалить',
cancelButtonText: 'Отмена'
});
});
// Проверка отображения кнопок
cy.get('.swal2-popup').should('be.visible');
cy.get('.swal2-confirm').should('contain', 'Удалить');
cy.get('.swal2-cancel').should('contain', 'Отмена');
// Симуляция нажатия на кнопку "Удалить"
cy.get('.swal2-confirm').click();
// Проверка того, что действие выполнено (например, редирект или сообщение)
cy.url().should('include', '/deleted');
});
Этот тест проверяет, как работает всплывающее окно с кнопками “Удалить” и “Отмена”, а также тестирует поведение при нажатии на кнопку подтверждения.
В реальных приложениях уведомления часто связаны с асинхронными операциями, такими как запросы к серверу. Для такого рода тестов важно проверить, что уведомления правильно отображаются в зависимости от результата этих операций.
Пример теста для асинхронной операции:
it('Показывает уведомление после асинхронного запроса', () => {
cy.visit('/');
// Симуляция асинхронной операции
cy.intercept('POST', '/api/delete', {
statusCode: 200,
body: { message: 'Элемент успешно удалён.' }
}).as('deleteItem');
cy.window().then((win) => {
win.Swal.fire({
title: 'Удалить элемент?',
showCancelButton: true,
confirmButtonText: 'Удалить'
}).then(() => {
// Симуляция успешного ответа после подтверждения
cy.wait('@deleteItem').then(() => {
win.Swal.fire('Удалено!', 'Элемент был успешно удалён.', 'success');
});
});
});
// Проверка уведомления о успешной операции
cy.get('.swal2-popup').should('contain', 'Удалено!');
});
Здесь используется cy.intercept() для перехвата
асинхронного запроса и имитации успешного ответа от сервера. После этого
проверяется, что уведомление об успешном удалении появляется после
завершения асинхронной операции.
В ходе E2E-тестирования с использованием SweetAlert важно учесть все аспекты поведения уведомлений и их взаимодействие с пользователем. Тесты должны охватывать различные типы уведомлений, действия кнопок, асинхронные операции и другие элементы, которые могут влиять на интерфейс и опыт пользователя. Правильная настройка и детальное тестирование таких компонентов позволяет повысить качество и стабильность веб-приложений.