最近Firebaseを利用して開発する機会が多いため、今回もFirebaseネタです。Firebase Functionsで自動テストする方法を紹介しようと思います。

通常Firebase Functionsでテストを行う場合は、ざっくりとした手順で
- 開発している環境でFirebase Emulatorを起動
firebase emulators:start --inspect-functions
というコマンドを実行
- functionsディレクトリで
npm test
を実行 という感じだと思います。
ローカルで行うのはそこまで大変ではないのですが、CI上で行う場合はEmulatorを設定したり、npm installでmoduleをインストールしたりなど割と大変な環境設定が必要と思われてきました。 先日Firebase summitで割と楽に設定する方法が紹介されていたので、改めて紹介しておきます。
手順
1. 下記のようなyamlを.github/workflowディレクトリに作成
on: [push, pull_request]
jobs:
emulator_test:
name: Firebase Functions test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: "12"
- name: Install Firebase Emulator
run: npm install -g firebase-tools
- name: Install module
run: npm install
working-directory:
- name: Run test
working-directory:
run: firebase emulators:exec --project 'npm test'
注意点としては下記の2点です。
working-directory
の設定 :.githubディレクトリから見た時のfunctionsディレクトリの相対パスを設定します。Install module
、およびRun test
のstep両方とも同じで良いです。project-id
の設定 : Firebaseのコンソール画面のプロジェクトの概要->プロジェクトを設定に表示されているプロジェクトIDを設定します。
前半のInstall Firebase Emulator
というstepまではこのままコピーで問題ないと思います。
npm test
のところはnpm test test/hogehoge.js
というような形にすれば特定のテストスクリプトだけ実行することができます。この辺りはお好みです。
2. GitHubにPushして結果を見る
もうここまで来るとほとんど終わったも同然で、あとはPushしてjobの結果を見るだけです。(たぶん)成功すると思います!
次回予告
npm test
が実行できたのは良かったと思いますが、これだけでは苦しいものがあります。テストを実行した結果テストコードが異常終了した時はSlackなどで通知して欲しいと思うでしょうし、GitHub Actionsのテストを行うために何回もGitHubにPushするとGitHubのコミットログが汚れてしまいそうです。
次回以降は
- Node.jsでmochaで実行した結果をGitHubで受信する方法
- GitHub Actionsのローカルでのテスト方法 といったトピックを紹介していきます。