Существует открытая проблема для запуска сквозного теста Cypress.io GitHub Action в репозитории Yarn2 plug-and-play: действие завершается со следующей ошибкой:
Error: Cannot find module 'cypress'
Require stack:
- /home/runner/work/_actions/cypress-io/github-action/v2/dist/index.js
Я сам пытался решить эту проблему и обнаружил, что основной причиной является эта строка действия GitHub:
// If `command:` is provided, run it. const customCommand = core.getInput('command') if (customCommand) { console.log('Using custom test command: %s', customCommand) return execCommand(customCommand, true, 'run tests') } // If `command-prefix:` is provided, use it. const commandPrefix = core.getInput('command-prefix') if (commandPrefix) { return runTestsUsingCommandLine() } // Otherwise, find `cypress` and run it. debug('Running Cypress tests using NPM module API') debug(`requiring cypress dependency, cwd is ${process.cwd()}`) debug(`working directory ${workingDirectory}`) const cypressModulePath = require.resolve('cypress', { paths: [workingDirectory] }) || 'cypress' debug(`resolved cypress ${cypressModulePath}`)
В приведенном выше коде реализации, которые не предоставляют переменную command
или command-prefix
в конфигурации with
действия GitHub, откатываются к методу require.resolve
в Node. Это означает, что реализации, использующие command
(например, command: yarn cypress
) или command-prefix
, не столкнутся с этой ошибкой, поскольку они не достигнут строки, содержащей require.resolve
.
Разрешение пути к cypress
не удается в репозитории Yarn2, потому что действие GitHub выполняет свой скрипт Node, используя NPM. Поэтому он делает предположение, что NPM установил свои зависимости, несмотря на иную проверку установки Yarn. Я внес запрос в оригинальный выпуск для поддержки файла Yarn .pnp.cjs
, который должен исправить require.resolve
для поиска модулей, установленных с помощью Plug and Play.
Чтобы разблокировать себя, пока это не получит официальную поддержку, добавьте command-prefix: yarn dlx
. При замене cypress run --flags
на yarn dlx cypress run --flags
команда модуля Node сначала передается через yarn
, который внедряет файл .pnp.cjs
для поддержки Plug and Play.
Хотя вы можете добавить скрипт в файл package.json
, содержащий cypress run — flags
, опция command-prefix
предлагает одно важное преимущество по сравнению с альтернативой command
: автоматическая вставка флагов, как указано with
. Когда вы используете command
, ваша конфигурация в with
будет игнорироваться, и вам потребуется указать все свои флаги в определении сценария NPM в package.json
. Хотя это подходит для многих случаев использования, позволяя вам легко запускать тесты Cypress локально, это становится проблематичным при использовании секретов GitHub (например, вашего ключа записи) в вашем запуске Cypress.
Для тех, кто осмелится погрузиться глубже, чем мое расследование, команда Cypress может быть признательна за запрос на включение, чтобы решить эту проблему в коде. 😉