Create React Appで作ったプロジェクトのテストがCircle CIでコケた時に見る覚書

一晩悩んだやつなので、次困らないように覚書。

前提

  • 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"
}
Comment