Я пытаюсь провести несколько тестов e2e, используя CucumberJS и ProtractorJS для веб-сайта. Однако мой код становится беспорядком. Один и тот же код находится в разных местах: в объекте World, в файле ловушек Before и After и в файле определений шагов. Различные файлы, похоже, не имеют четко определенного использования: я просто расширяю их, добавляя некоторые повторно используемые части в объект World. (Например, я поместил объект Login in the World, однако у меня также есть хук перед входом в систему). Файлы World и step также становятся довольно большими. Еще одна трудность, с которой я сталкиваюсь, заключается в том, что некоторые обновления на сайте происходят асинхронно. Все это затрудняет анализ общего хода теста и отладку. Мой вопрос: каковы возможные архитектуры кода тестов e2e с использованием Cucumber.
Обновление:
Проект был увеличен. Мне нужно протестировать потоки через несколько сайтов. Два передних и один задний сайт. Пользователи могут размещать на одном из обоих интерфейсных сайтов различные типы информации. Это должно быть проверено администраторами сайта на бэкэнде, а затем оно должно появиться на одном из обоих фронтенд-сайтов. Я также должен проверять почту, отправляемую, когда пользователь отправляет информацию и когда администратор принимает/редактирует информацию. Мне кажется, что проще всего использовать учетную запись веб-почты и использовать ProtractorJS для проверки этого? Кроме того, у меня есть ограничение, что тесты должны быть в определенные сроки. Поэтому я не вхожу/выхожу из фоновых условий каждого теста (в зависимости от сценария) и больше не обновляю страницу для каждого сценария (дополнительная сложность, поскольку два интерфейса используют один и тот же логин).
Есть ли какие-нибудь примеры/шаблоны того, как я должен это сделать?
Как я это сделал, начал использовать шаблон Page Object. Но некоторая логика, например вход в систему, отличается для каждого сайта, поэтому я поместил их в отдельные объекты. Также у меня есть кэшированный объект страницы рядом с объектом страницы. Первый делегирует последнему, но только если URL-адрес или состояние входа изменились.