Create React Appで作ったプロジェクトのテストがCircle CIでコケた時に見る覚書
一晩悩んだやつなので、次困らないように覚書。 前提 Create React Appで作ったプロジェクト テストはJest ローカルでのテストは全てPASSしている 起きたこと テストファイルが増えてきたタイミングで、n […]
広告ここから
広告ここまで
目次
一晩悩んだやつなので、次困らないように覚書。
前提
- Create React Appで作ったプロジェクト
- テストはJest
- ローカルでのテストは全てPASSしている
起きたこと
テストファイルが増えてきたタイミングで、not enough memory
というエラーでCircle CIのビルドがコケ出した。
Summary of all failing tests
FAIL src/components/test/Component.test.js
● Test suite failed to run
ENOMEM: not enough memory, read
at Object.fs.readSync (fs.js:682:19)
at tryReadSync (fs.js:480:20)
at Object.fs.readFileSync (fs.js:509:19)
at Object.<anonymous> (node_modules/semantic-ui-react/dist/commonjs/addons/Confirm/Confirm.js:49:14)
ローカルで実行すると成功する & memory
と言われているので、Circle CI上でテストするにはメモリを使いすぎているっぽい。
対応
2016年版 Node.jsで幸せになれる10の習慣 – Qiitaの「7. ゴミを避けろ」で紹介されているように、メモリを使いすぎないように設定をして対応。
また、Create React App
に同梱されているreact-scripts
コマンドはJestのオプションも受け取ってくれるので、--maxWorkers
オプションも追加して同時実行数も制御するようにする。
結果test:ci
というコマンドをpackage.json
に追加して、それをCircle CIでは実行するようにしています。
$ cat package.json | jq .scripts
{
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject",
"test:ci": "CI=true node --max_old_space_size=1024 --trace-gc ./node_modules/react-scripts/bin/react-scripts.js test --env=jsdom --maxWorkers=2"
}