Firebase Cloud Functionsでjestを導入するまでの道のり

November 6, 2020,
tags: Cloud Functions Firebase jest test


このエントリーをはてなブックマークに追加

最近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を指定
comments powered by Disqus