Cloud Functions for Firebase + TypeScriptでテストを書くときの初期設定の備忘録。
ディレクトリ構成
. ├── __tests__ ... テストのコード ├── src ... ソースのコード ├── lib ... コンパイルしたコードの出力先 ├── jest.config.js ├── package-lock.json ├── package.json ├── tsconfig.json └── tsconfig.build.json ... ビルド用のtsconfig.json
テストコードはデプロイしたくないので、src配下には配置しない形。
そのままだと、コンパイルの対象にならないので、ビルド用のtsconfig.jsonも利用する。
インストール
まずはインストール。
$ npm i -D jest ts-jest @types/jest $ npm i -D sinon @types/sinon
ts-jestというTypeScript用のプリプロセッサがあるので、それも利用する。
sinonは、spyやstub、mockなどのライブラリ。
jestの設定
テストとして実行する対象(testMatch
)や前処理を行う対象(transform
)を指定。
package.jsonでも指定できるけど、TypeScript Deep Diveにあわせる。
// jest.config.js module.exports = { testMatch: [ "**/__tests__/**/*.+(ts|tsx|js)", "**/?(*.)+(spec|test).+(ts|tsx|js)" ], transform: { "^.+\\.(ts|tsx)$": "ts-jest" } };
tsconfig.jsonの設定
型定義を追加したので、types
に追加。
__tests__
もinclude
に追加する。
{ "compilerOptions": { // ... 略 "types": [ // ... 略 "@types/jest", "@types/sinon", ] }, // ... 略 "include": [ "src", "__tests__" ] }
tsconfig.build.jsonの設定
ビルドするときは__tests__
配下を対象にしたくないなぁと思ってたら、
Stack Overflowのが良さそうだったので、試してみた。
ビルド用にtsconfig.build.json
を用意する形。
tsconfig.json
を拡張して、exclude
を設定する。
// tsconfig.build.json { "extends": "./tsconfig", "exclude": ["**/__tests__/", "**/*.test.ts", "**/*.mock.ts"] }
packge.jsonの設定
npm t
やnpm run test
でjestを実行できるようにscripts
を設定。
あと、ビルドするときは、tsconfig.build.json
を使うように変更
// package.json { "scripts": { // ... 略 "build": "tsc --project tsconfig.build.json", "test": "jest" }, }
テストの実行
# 全実行 $ npm t # ファイル指定 $ npm t __tests__/sum.test.js # テストケース指定 $ npm t -- -t hoge_case
以上!!
参考にしたサイトさま
- Firebase Cloud Functionsの単体テストでJestとTypeScriptを使うセットアップ等 - Qiita
- Exclude test files from compilation but include for plugin processing · Issue #605 · microsoft/TypeScript-Sublime-Plugin
- javascript - How to exclude specific files in typescript only for the build? - Stack Overflow
- Jest - TypeScript Deep Dive 日本語版
- Configuring Jest · Jest
- コピペで使うFirebase【テスト編】 - Qiita
- Cloud Firestoreの勘所 パート4 — 単体テスト. Cloud FunctionsのFirestoreトリガーの自動テスト🤖 | by mono | google-cloud-jp | Medium
- 今から始めるCloud Functions for Firebaseテスト入門| 開発者ブログ | 株式会社アイソルート