Firestoreのセキュリティルールのユニットテストでハマったこと

Firestoreのセキュリティルールのテストを書こうとしたらいろいろハマったので殴り書き。

環境

Typescript+Jest+@firebase/rules-unit-testing

テストフレームワークとしてFirebaseのドキュメントで使われているmochaの代わりにJestを使っているが、今回の話には全く関係ない。

ハマりポイント

@firebase/rules-unit-testingのインポートにはワイルドカードを使う

正:

import * as firebase from "@firebase/rules-unit-testing";

誤:

import firebase from "@firebase/rules-unit-testing";

誤っているほうだと、app()loadFirestoreRules()などテストに必要不可欠なメソッドが呼べない。 しかも型エラーが出ないのでたちが悪い。

アサーションにはawaitが必要

正:

it("some test", async () => {
  /* ... */
  await firebase.assertSucceeds(/* ... */);
});

誤:

it("some test", () => {
  /* ... */
  firebase.assertSucceeds(/* ... */);
});

誤っているほうだと常にテストがPASSしてしまう。