Bitriseでだけfirebaseエミュレータ+jestを使ったテストがコケるときの対処法
経緯
- Bitriseで
firebase
のfirestore rulesのテストを実行したところ、ローカル環境では動作するのにBitriseだと動かなくてどハマりした。(下記症状)
-
このIssueで議論されているが、みんな苦しんでいるようだった
症状
+ node --version
v10.23.0
+ yarn install
...(省略)
+ yarn test
yarn run v1.22.4
$ firebase emulators:exec --only firestore 'jest --env=node'
i emulators: Starting emulators: firestore
⚠ It appears you are running in a CI environment. You can avoid downloading the Firestore Emulator repeatedly by caching the /Users/vagrant/.cache/firebase/emulators directory.
i firestore: downloading cloud-firestore-emulator-v1.11.5.jar...
i firestore: Firestore Emulator logging to firestore-debug.log
i Running script: jest --env=node
TypeError: _gracefulFs(...).realpathSync.native is not a function
...(省略)
at Module._compile (internal/modules/cjs/loader.js:1136:30)
at Module._compile (pkg/prelude/bootstrap.js:1281:32)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1156:10)
at Module.load (internal/modules/cjs/loader.js:984:32)
at Function.Module._load (internal/modules/cjs/loader.js:877:14)
at Module.require (internal/modules/cjs/loader.js:1024:19)
at Module.require (pkg/prelude/bootstrap.js:1225:31)
⚠ Script exited unsuccessfully (code 1)
i emulators: Shutting down emulators.
i firestore: Stopping Firestore Emulator
Error: Script "jest --env=node" exited with code 1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
原因(推測)
-
yarn test
で実際に実行されているコマンドはfirebase emulators:exec --only firestore 'jest --env=node'
- このとき
firebase
コマンドは/usr/local/bin/firebase
を見ているため、どうやらこのfirebase
が叩こうとするjest
がローカルディレクトリ(./node_modules/.bin/jest
)とは別物なのでローカルと挙動が変わってしまう=CIで動かない。
- →Bitriseのnodeプリインストール環境だとfirebase emulator+jestがコケるってこと...
対処法
- 手元環境で
yarn add -D @types/jest
しておく(package.jsonのdevDependenciesに追加される)
-
yarn add global firebase-tools
をWorkflowのScriptに追加する
- →
firebase
とjest
の2つのコマンドを、自前でインストールしたものを使うようにする。
node --version
yarn global add firebase-tools # 追加
export PATH=`pwd`/node-modules/.bin:$PATH # yarnで入れたコマンドにパスを通す
yarn install
yarn test
firebase
のfirestore rulesのテストを実行したところ、ローカル環境では動作するのにBitriseだと動かなくてどハマりした。(下記症状)+ node --version
v10.23.0
+ yarn install
...(省略)
+ yarn test
yarn run v1.22.4
$ firebase emulators:exec --only firestore 'jest --env=node'
i emulators: Starting emulators: firestore
⚠ It appears you are running in a CI environment. You can avoid downloading the Firestore Emulator repeatedly by caching the /Users/vagrant/.cache/firebase/emulators directory.
i firestore: downloading cloud-firestore-emulator-v1.11.5.jar...
i firestore: Firestore Emulator logging to firestore-debug.log
i Running script: jest --env=node
TypeError: _gracefulFs(...).realpathSync.native is not a function
...(省略)
at Module._compile (internal/modules/cjs/loader.js:1136:30)
at Module._compile (pkg/prelude/bootstrap.js:1281:32)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1156:10)
at Module.load (internal/modules/cjs/loader.js:984:32)
at Function.Module._load (internal/modules/cjs/loader.js:877:14)
at Module.require (internal/modules/cjs/loader.js:1024:19)
at Module.require (pkg/prelude/bootstrap.js:1225:31)
⚠ Script exited unsuccessfully (code 1)
i emulators: Shutting down emulators.
i firestore: Stopping Firestore Emulator
Error: Script "jest --env=node" exited with code 1
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
原因(推測)
-
yarn test
で実際に実行されているコマンドはfirebase emulators:exec --only firestore 'jest --env=node'
- このとき
firebase
コマンドは/usr/local/bin/firebase
を見ているため、どうやらこのfirebase
が叩こうとするjest
がローカルディレクトリ(./node_modules/.bin/jest
)とは別物なのでローカルと挙動が変わってしまう=CIで動かない。
- →Bitriseのnodeプリインストール環境だとfirebase emulator+jestがコケるってこと...
対処法
- 手元環境で
yarn add -D @types/jest
しておく(package.jsonのdevDependenciesに追加される)
-
yarn add global firebase-tools
をWorkflowのScriptに追加する
- →
firebase
とjest
の2つのコマンドを、自前でインストールしたものを使うようにする。
node --version
yarn global add firebase-tools # 追加
export PATH=`pwd`/node-modules/.bin:$PATH # yarnで入れたコマンドにパスを通す
yarn install
yarn test
yarn test
で実際に実行されているコマンドはfirebase emulators:exec --only firestore 'jest --env=node'
firebase
コマンドは/usr/local/bin/firebase
を見ているため、どうやらこのfirebase
が叩こうとするjest
がローカルディレクトリ(./node_modules/.bin/jest
)とは別物なのでローカルと挙動が変わってしまう=CIで動かない。
- →Bitriseのnodeプリインストール環境だとfirebase emulator+jestがコケるってこと...
- 手元環境で
yarn add -D @types/jest
しておく(package.jsonのdevDependenciesに追加される) -
yarn add global firebase-tools
をWorkflowのScriptに追加する- →
firebase
とjest
の2つのコマンドを、自前でインストールしたものを使うようにする。
- →
node --version
yarn global add firebase-tools # 追加
export PATH=`pwd`/node-modules/.bin:$PATH # yarnで入れたコマンドにパスを通す
yarn install
yarn test
Author And Source
この問題について(Bitriseでだけfirebaseエミュレータ+jestを使ったテストがコケるときの対処法), 我々は、より多くの情報をここで見つけました https://qiita.com/hummer/items/08fe7d98fb993bd665d5著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .