Cypress code-coverageとinstrument-craプラグインを使用しています。これは、自分のマシンでローカルに実行すると問題なく動作しますが、CircleCI を介して実行すると、次のようになります。
CypressError: cy.task('coverageReport') failed with the following error:
> Error: Command failed with ENOENT: nyc report --report-dir ./coverage --temp-dir /root/app/.nyc_output --reporter=lcov --reporter=clover --reporter=json
spawn nyc ENOENT
どのファイルについて不平を言っているのかは明らかではありません。/root/app/.nyc_output が存在し、カバレッジ データが含まれていることを確認しました。
Cypress でデバッグ ログを有効にしました。
code-coverage parsed sent coverage +0ms
code-coverage created folder /root/app/.nyc_output for output coverage +1ms
code-coverage wrote coverage file /root/app/.nyc_output/out.json +17ms
cypress:server:plugins:child execute plugin event: task ({ eventId: 2, invocationId: 'inv11' }) +100ms
code-coverage saving coverage report using command: "nyc report --report-dir ./coverage --temp-dir /root/app/.nyc_output --reporter=lcov --reporter=clover --reporter=json" +68ms
code-coverage current working directory is /root/app +0ms
フルランはhttps://circleci.com/gh/magjac/graphviz-visual-editor/114で入手できます。
このガイドに従ってセットアップを行いました。
これは私の CircleCI config.yaml です (多くの恐ろしいデバッグと回避策があります):
# Javascript Node CircleCI 2.0 configuration file
#
# Check https://circleci.com/docs/2.0/language-javascript/ for more details
#
version: 2
jobs:
integration-test:
docker:
- image: cypress/base:8
environment:
## this enables colors in the output
TERM: xterm
working_directory: ~/app
steps:
- checkout
- restore_cache:
keys:
- v1-deps-{{ .Branch }}-{{ checksum "package.json" }}
- v1-deps-{{ .Branch }}
- v1-deps
- run:
name: Install Dependencies
no_output_timeout: 30m
command: npm ci
- save_cache:
key: v1-deps-{{ .Branch }}-{{ checksum "package.json" }}
# cache NPM modules and the folder with the Cypress binary
paths:
- ~/.npm
- ~/.cache
- run: ls -la
- run: ls -la ./node_modules/.bin
- run: ls -la .nyc_output/out.json || true
- run: mkdir -p ./coverage
- run: ls -la -R coverage || true
- run: make
# This is the line that fails, but we ignore it and let the workaround below do its job
- run: npm run start:coverage & $(npm bin)/wait-on http://localhost:3000/ && env CYPRESS_DEBUG="code-coverage" DEBUG="code-coverage" $(npm bin)/cypress run --record --key a12725d3-851c-4e67-b432-079b4fb1a875 --spec cypress/integration/rendering.spec.js || true
- run: find . -name coverage || true
- run: ls -la -R coverage || true
- run: ls -la
- run: ls -la .nyc_output/out.json || true
# Workaround: Run nyc report stand-alone
- run: ./node_modules/.bin/nyc report --report-dir ./coverage --temp-dir /root/app/.nyc_output --reporter=lcov --reporter=clover --reporter=json
- run: find . -name .nyc_output || true
- run: find . -name coverage || true
- run: ls -la .nyc_output/out.json || true
- run: ls -la -R coverage || true
- run: yarn run codecov
workflows:
version: 2
build-and-integration-test:
jobs:
- integration-test
編集:見つからないのは nyc コマンドです。サイプレスの呼び出し前に「env PATH="$PATH:./node_modules/.bin"」を追加すると、問題が解決します。本当にこれを使用する必要がありますか、それとももっと良い方法がありますか?
EDIT 2:より良い回避策はnpx cypress run
、パスを node_modules/.bin に自動的に設定するを使用することです。おそらくこれが本当の解決策でしょうか?