created: 2019-04-27T03:38:51.000Z

circleci上でjest-watch-typeaheadがロードできずエラーになる場合

前提

以下の場合だと(たぶん) circleci上でテストをするとき問題になる

  • create-react-app で作業している
  • yarn reject 済み

こんなエラー

circleci上でこんな感じにてテストが落ちる

#!/bin/bash -eo pipefail
cd ./functions/viewer/client && \
$(npm bin)/jest
● Validation Error:

  Module /Users/sakamossan/.ghq/github.com/functions/viewer/client/node_modules/jest-watch-typeahead/filename.js in the watchPlugins option was not found.
         <rootDir> is: /home/circleci/project/functions/viewer/client

  Configuration Documentation:
  https://jestjs.io/docs/configuration.html

問題

  • package.jsonのjest.watchPluginsの設定が絶対パスになっている
  • jestの設定は <rootDir> という変数みたいなのが使えるが、watchPluginsではこれが使えない
  • ローカルでは絶対パスで正しいが、circleci上ではそれだとダメ

対応

watchPluginsはパスを探すときnode_modules配下を探してくれるので、 node_modules配下の相対パスを記述すれば読んでくれた

{
  "jest": {
    "watchPlugins": [
      "jest-watch-typeahead/filename",
      "jest-watch-typeahead/testname"
    ]
  }
}

これはもともとのドキュメントにも書いてある書き方

所感

create-react-app/reject のあれがちょっとアレでしたね、というところ