#security #cookies #cross-domain #cypress #same-origin-policy
#Безопасность #файлы cookie #междоменный #cypress #политика того же происхождения
Вопрос:
Для теста E2E с использованием Cypress мы должны установить chromeWebSecurity
false
значение, чтобы предотвратить проблему CORS при выполнении запросов из бегуна Gitlab к развернутому бэкэнду. К сожалению, отключение этого флага также вызывает неожиданные побочные эффекты, такие как неочищение локального хранилища и файлов cookie между тестами, сохранение состояния, следовательно, тесты не выполняются изолированно и даже вызывают недетерминированное поведение в зависимости от их порядка.
Возможным исправлением было добавление a beforeEach
со следующим содержимым во ВСЕ describe
блоки:
// eslint-disable-next-line @typescript-eslint/ban-ts-ignore
// @ts-ignore
cy.clearCookies({ domain: null });
cy.clearLocalStorage();
Это не только заставляет тесты выполняться дольше, но и необходимость вручную добавлять их несколько раз в один файл действительно громоздка и подвержена ошибкам. Наконец, первая строка является взломом, поскольку domain
опция не задокументирована и доступна только внутри. Я лично опасаюсь, что в какой-то момент эта опция будет недоступна и вызовет ошибки без полезного сообщения об ошибке, и мне действительно не нравится полагаться на внутренние детали реализации.
Есть ли какой-либо другой идиоматический и безопасный способ очистки всего состояния при chromeWebSecurity
отключении?
Ответ №1:
Один из верных способов — разделить каждый случай в разных файлах спецификаций. Между файлами npx cypress run закрывает браузер и запускает его снова