Хочу писать один простой e2e тест, и генерировать из него все возможных варианты и тем самым детально фиксировать поведение интерфейса.
Например:
Форма с именем и возрастом, с кнопкой submit (дергающая запрос).
Можно вместо имени вписать: " ", " name ", " name🤡 "
Вместо возраста можно вписать: "0", "-1", "--1", "e", " {age} ", "notnumber"
Таким образом получается: 1 + 3 + 6 = 10 вариантов заполнения формы.
Которые не хочется писать вручную(
Для всех тестов хочется:
- Фиксировать как выглядит интерфейс (визуальный регресс, через сравнение скриншотов);
- Фиксировать что отправляется при этом на бекенд, проверять форму запроса (body, query, url, headers и т.п.);
Основные концепции:
- Нам не всегда важно правильное ли поведение, а только отслеживаем его изменение, через скриншоты и слепки запросов.
- Пишем тесты исходя из дизайн системы. То есть размечаем интерфейс на компоненты, пишем какие варианты использования этого компонента есть, и из этой информации один тест превращается во множество.
- Установить зависимость
npm i --save-dev cypress-reflex
- В файл
cypress/support/e2e.js
добавить строку:
import "cypress-reflex/cypress-integration/commands";
- В файл
cypress.config.js
добавить строки:
const { getCypressReflexEnv } = require("cypress-reflex/cypress-integration/env");
const { registrateCypressReflexTasks } = require("cypress-reflex/cypress-integration/tasks");
// ...
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
// ...
registrateCypressReflexTasks(on, config);
// ...
return {
...config,
...getCypressReflexEnv(config),
}
},
},
});
-
Добавить необходимые конфиги
-
Добавить в
package.json
комманду для генерации тестов
"generate-tests": "rm -rf cypress/e2e/generated && cypress-reflex --cases=cypress-reflex-cases --commands=cypress-reflex-cases/commands.js --output=cypress/e2e/generated"
- Вкрутить prettier в примеры и в сам код
- Переименовать пакет cypress-reflex => cypress-reflex-cli
- Накидать инструкцию