YSNHatenaBlog

主にアプリやWebサービス開発について

Firestoreルールのテストの書き方を再調査

Firestoreルールのテストの書き方を復習がてら再調査。

firebase.google.com

カバレッジの取得。そういえばできた気がする。

http://localhost:8080/emulator/v1/projects/<project_id>:ruleCoverage.html

Firestoreに限らないかもしれないが、最初のデータセットアップが結構めんどくさい。 本家にもAdminAppを使うぐらいしか解を書いていない。

テストのセットアップが非常に複雑である

firebase.google.com

予め作った、データセットが定義されたファイルからインポートできたらいいのになぁと思っているのだが...

ちなみにテスト前にデータのimportはできるかもしれない。が、beforeEachで都度インポート、みたいなことはできなそう。 firebase.google.com

いろいろ調べたが、やはり都度AdminAppでやるしかなさそう。

基本的には*.test.tsごとにプロジェクトIDを指定し、beforeEachでデータセットアップ、afterEachでclearFirestoreDataするようにしたい。 beforeEachごとにプロジェクトのIDを更新するというのが前あったが、使い捨てプロジェクトがガンガン生成されるためちょっときれいじゃない感がある。他に方法なさそうならこれでもいいけど。

目的と直接関係ないが@firebase/rules-unit-testingにこんなのがあった。

withFunctionTriggersDisabled

github.com

この引数のクロージャの中でFirestoreを書き換える分にはFirestore Triggerが発火しないらしい。でも実装見てる感じ、クロージャの中実行前後でエミュレータのWeb API叩いて全体でdisableさせてるみたいなので、並列でテストが実行されていたりするとおかしなことになりそう。