2020年11月06日
Firebase Cloud Functionsでjestを導入するまでの道のり
最近Firebase Cloud Functionsでお仕事をしているのですが、jestを入れたちょっとハマったのでその記録です。
環境について
firebase initで全力でenterfunctionsを用意しました。 一応こんな感じでTypeScriptでコード書いててeslintは導入済みの想定です。
まずはjestを入れる
yarn add --dev jest @types/jest ts-jest
こんな感じでいれました。
テスト用のコードはビルドしたくないのでtsconfigの設定を変更する
今回はテストは __test__
ディレクトリに入れる用にしているのでexclude
で__test__
はビルド対象から外すようにします。
// tsconfig.json
...
"exclude": [
"src/**/__test__/*.ts"
]
eslintでエラーになった
$ yarn jest
0:0 error Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser.
どうやらtscofnig.jsonで、testファイルをexcludeしたのが原因らしい。
しかしtestコードはbuildしたくない。。
jest用のtsconfig作って解決した
tsconfig.jest.json
{
"extends": "./tsconfig.json",
"exclude": []
}
このようにtsconfig.jest.json
を作って .eslintrc.js
を以下のように修正した。
parserOptions: {
project: "tsconfig.jest.json",
sourceType: "module",
},
これでうまく行った。
最後にnpm scriptsにtest: 'jest'
って書いてnpm run test
とかできるようにした。
ついでだからGithub Actionsでjest動かすようにした
こんな感じに書いた。
name: pull request
on: [pull_request]
jobs:
test:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
- name: setup Node
uses: actions/setup-node@v2-beta
with:
node-version: ’12’
- name: Build
run: cd functions && yarn
- name: Lint
run: cd functions && yarn lint
- name: Jest
run: cd functions
でもなぜかエラーになった。
とおもったらjest.config.js
がignoreされててコミットできてなかった…。
原因はfunctions/.giignore
の記述にあった。
**/*.js
このようにjsファイルがコミットされないようになっていたのでjest.config.jsもコミットされてなかった。。。
なので下記のように修正。
**/*.js
!jest.config.js
まとめ
- yarn add –dev jest @types/jest ts-jest
- tsconfig.jsonでexcludeを
src/**/__test__/*.ts
- tsconfig.jest.jsonでexcludeを
[]
に - .eslintrc.jsでparserOptions.projectで
tsconfig.jest.json
を指定