Отключение веб-безопасности для тестов Cypress сохраняет состояние — как принудительно выполнить очистку?

#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 закрывает браузер и запускает его снова