GitHub ActionsでFirebase functionsのテストを自動実行する

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

通常Firebase Functionsでテストを行う場合は、ざっくりとした手順で

  1. 開発している環境でFirebase Emulatorを起動
    • firebase emulators:start --inspect-functions というコマンドを実行
  2. 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のローカルでのテスト方法 といったトピックを紹介していきます。

参考