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"
    }
    
    広告ここから
    広告ここまで
    Home
    Search
    Bookmark