Вопрос или проблема
Я добавил ‘cypress-wait-until’ в свой проект. Все тесты выполняются локально как из панели управления, так и в безголовом режиме. Но когда они запускаются из конвейера в Azure, все они терпят неудачу, потому что не могут разрешить новый пакет. Мне нужно ли иметь задачу конвейера, которая устанавливает пакет cypress-wait-until перед тем, как строить тесты для их выполнения?
2024-10-31T15:36:00.4638003Z Выполнение: add-essential-item-to-basket.cy.ts (1 из 9)
2024-10-31T15:36:07.8123501Z
2024-10-31T15:36:07.8128234Z Ой... мы обнаружили ошибку при подготовке этого тестового файла:
2024-10-31T15:36:07.8128603Z
2024-10-31T15:36:07.8129030Z > cypress/support/e2e.js
2024-10-31T15:36:07.8130773Z
2024-10-31T15:36:07.8131891Z Ошибка была:
2024-10-31T15:36:07.8132124Z
2024-10-31T15:36:07.8132500Z Ошибка: Ошибка компиляции Webpack
2024-10-31T15:36:07.8133621Z Модуль не найден: Ошибка: Невозможно разрешить 'cypress-wait-until' в '/azp/_work/1/s/cypress/support'
2024-10-31T15:36:07.8134898Z at handle (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/@packages/server/node_modules/@cypress/webpack-preprocessor/dist/index.js:212:23)
2024-10-31T15:36:07.8135730Z at finalCallback (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:441:32)
2024-10-31T15:36:07.8136173Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:505:17
2024-10-31T15:36:07.8136559Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/HookWebpackError.js:68:3
2024-10-31T15:36:07.8137316Z at Hook.eval [as callAsync] (eval at create (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
2024-10-31T15:36:07.8137818Z at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/Hook.js:18:14)
2024-10-31T15:36:07.8138237Z at Cache.storeBuildDependencies (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Cache.js:122:37)
2024-10-31T15:36:07.8138641Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:501:19
2024-10-31T15:36:07.8139086Z at Hook.eval [as callAsync] (eval at create (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
2024-10-31T15:36:07.8140210Z at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/Hook.js:18:14)
2024-10-31T15:36:07.8140875Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:498:23
2024-10-31T15:36:07.8141286Z at Compiler.emitRecords (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:919:5)
2024-10-31T15:36:07.8141662Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:490:11
2024-10-31T15:36:07.8142032Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:885:14
2024-10-31T15:36:07.8142479Z at Hook.eval [as callAsync] (eval at create (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/HookCodeFactory.js:33:10), <anonymous>:6:1)
2024-10-31T15:36:07.8142963Z at Hook.CALL_ASYNC_DELEGATE [as _callAsync] (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/tapable/lib/Hook.js:18:14)
2024-10-31T15:36:07.8143369Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:882:27
2024-10-31T15:36:07.8143947Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/neo-async/async.js:2818:7
2024-10-31T15:36:07.8144438Z at done (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/neo-async/async.js:3522:9)
2024-10-31T15:36:07.8144832Z at alreadyWritten (/root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:714:8)
2024-10-31T15:36:07.8145223Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/webpack/lib/Compiler.js:802:19
2024-10-31T15:36:07.8145735Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/graceful-fs/graceful-fs.js:123:16
2024-10-31T15:36:07.8146312Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/@packages/server/node_modules/graceful-fs/graceful-fs.js:123:16
2024-10-31T15:36:07.8146915Z at /root/.cache/Cypress/13.13.1/Cypress/resources/app/node_modules/@packages/server/node_modules/graceful-fs/graceful-fs.js:123:16
2024-10-31T15:36:07.8147320Z at FSReqCallback.readFileAfterClose [as oncomplete] (node:internal/fs/read_file_context:68:3)
2024-10-31T15:36:07.8147523Z
2024-10-31T15:36:07.8148145Z Это произошло во время компиляции и упаковки вашего тестового кода Cypress. Это обычно вызвано:
2024-10-31T15:36:07.8148369Z
2024-10-31T15:36:07.8148805Z - Отсутствующим файлом или зависимостью
2024-10-31T15:36:07.8149291Z - Синтаксической ошибкой в файле или одной из его зависимостей
Это работает, когда я запускаю свои тесты локально:
$ yarn cy:test
yarn run v1.22.21
$ yarn run cleanE2EReports && yarn run cy:terminal && yarn merge-reports && yarn create-html-report
$ rm -fr cypress/reports
$ cypress run --browser chrome
DevTools слушает на ws://127.0.0.1:52722/devtools/browser/755f7ae8-10e3-4ea8-9fe3-f7ecb8c63b50
====================================================================================================
(Запуск)
┌────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Cypress: 13.13.1 │
│ Браузер: Chrome 129 (безголовый) │
│ Версия Node: v20.9.0 (C:\Program Files\nodejs\node.exe) │
│ Спецификации: 9 найдены (add-essential-item-to-basket.cy.ts, add-product-to-basket-using-quick │
│ view.cy.ts, add-product-to-wishlist.cy.ts, checkout-stripe-failed.cy.ts, check │
│ out-stripe-success.cy.ts, complete-checkout-retrieves-order.cy.ts, complete-ch │
│ eckout-with-promo-code...) │
│ Искали: cypress/e2e/**/*.cy.ts │
│ Эксперименты: experimentalRunAllSpecs=true,experimentalMemoryManagement=true,experimentalWe… │
└────────────────────────────────────────────────────────────────────────────────────────────────┘
────────────────────────────────────────────────────────────────────────────────────────────────────
Выполнение: add-essential-item-to-basket.cy.ts (1 из 9)
Добавить продукт с и без основного предмета, используя модальное окно основных предметов
√ Добавить продукт в корзину и основной предмет с использованием основного предмета с StandardNoCheckout & TEST1V2EG (8461мс)
√ Добавить продукт в корзину без основных предметов с использованием StandardNoCheckout & TEST1V0EG (8995мс)
2 успешных (18с)
[mochawesome] Отчет JSON сохранен в C:\Users\paul.heathcote\Repos\WebsiteWebApp\cypress\reports\mocha\mochawesome.json
[mochawesome] Отчет HTML сохранен в C:\Users\paul.heathcote\Repos\WebsiteWebApp\cypress\reports\mocha\mochawesome.html
Ответ или решение
Ошибка Cypress: Webpack Compilation Error Module not found: Error: Can’t resolve ‘cypress-wait-until’
Введение
В процессе реализации автоматизированного тестирования при помощи Cypress могут возникать различные ошибки, одной из которых является ошибка компиляции Webpack, возникающая из-за недоступного модуля. В вашем случае проблема заключается в том, что при запуске тестов в Azure Pipeline не удается найти модуль cypress-wait-until
, несмотря на то, что все работает корректно локально. Данная статья проанализирует причины возникновения этой ошибки и предоставит рекомендации по ее устранению.
Суть проблемы
Вы упомянули, что после добавления модуля cypress-wait-until
тесты успешно выполняются локально, однако при попытке запуска через Azure Pipeline возникает ошибка компиляции Webpack, указывающая на невозможность разрешения модуля. Это может быть связано с тем, что пакет не установлен в среде CI/CD, где происходит выполнение тестов.
Возможные причины ошибки
-
Недостаток установки пакетов: Ваша среда затрат (Azure Pipeline) вероятно не имеет установленного пакета
cypress-wait-until
. Это значит, что при сборке тестов среда не может найти необходимые зависимости. -
Кэширование зависимостей: Если вы используете кэширование в своем CI/CD-про процессе, возможно, что устаревшая версия зависимостей загружена из кэша, и модуль
cypress-wait-until
не был добавлен в этот кэш. -
Отсутствие обновлений: Если Azure Pipeline не настроен на автоматическое обновление файлов
package.json
иyarn.lock
, это может привести к тому, что новые зависимости не будут установлены.
Рекомендации по устранению проблемы
-
Добавление установки зависимости в Azure Pipeline: Убедитесь, что в вашем пайплайне имеется шаг для установки зависимостей перед запуском тестов. Например, добавьте следующий шаг в свой файл YAML:
- script: | npm install cypress-wait-until npm install displayName: 'Установка зависимостей'
Или с использованием Yarn:
- script: | yarn install displayName: 'Установка зависимостей'
-
Удаление кэша: Если вы подозреваете, что устаревшая версия зависимостей хранится в кэше, попробуйте очистить кэш перед установкой:
- script: | npm cache clean --force npm install displayName: 'Очистка кэша и установка зависимостей'
И для Yarn:
- script: | yarn cache clean yarn install displayName: 'Очистка кэша Yarn и установка зависимостей'
-
Проверка наличия
cypress-wait-until
вpackage.json
: Убедитесь, что пакетcypress-wait-until
правильно указан в вашем файлеpackage.json
под зависимостями. Например:"devDependencies": { "cypress-wait-until": "^1.0.0" }
-
Логирование зависимостей: Для дополнительной прозрачности вы можете добавить шаг для логирования установленных пакетов в вашем пайплайне:
- script: | npm list --depth=0 displayName: 'Проверка установленных зависимостей'
Заключение
В заключение, ошибка в Azure Pipeline, указывающая на невозможность разрешения модуля cypress-wait-until
, вероятнее всего, вызвана отсутствием установки этого пакета в среде CI/CD. Следуя предложенным рекомендациям, вы можете устранить эту проблему и обеспечить стабильную работу ваших тестов в облачной инфраструктуре. Также рекомендуется регулярно проверять настройки вашего пайплайна на предмет обновлений и правильной установки необходимых зависимостей.