🧪
FlutterのテストでFirebase_coreをモックする方法
はじめに
Flutterでtestを書いてる時にFirebase_coreをmockする必要が生じることがあります。今回、その需要があり、Stack over flowにあったmockの作り方で対応できたのでメモしておきます。
問題
テスト箇所のfirebaseのインスタンス呼び出し箇所で
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
このようなログが吐かれます。
解決方法
- https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/test/mock.dart の内容をファイルにコピーし、Firebase アプリを初期化するテストにインポートします。
- すべてのテストのメイン関数の先頭で setupFirebaseAuthMocks(); を呼び出します。
- setUpAll関数の中で、await Firebase.initializeApp();を呼び出します(メイン関数のsetupFirebaseAuthMocks();の下に入れても動作します)。
おわりに
ちなみにこのmockで偽装できるのはfirebase_coreのinstanceの呼び出しだけです。
基本的なfirebaseのライブラリなどは偽装されるようですが、Crashlyticsなどは偽装できませんので注意が必要です。
参考
Discussion