🧪

FlutterのテストでFirebase_coreをモックする方法

2023/12/12に公開

はじめに

Flutterでtestを書いてる時にFirebase_coreをmockする必要が生じることがあります。今回、その需要があり、Stack over flowにあったmockの作り方で対応できたのでメモしておきます。

問題

テスト箇所のfirebaseのインスタンス呼び出し箇所で

[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

このようなログが吐かれます。

解決方法

  1. https://github.com/FirebaseExtended/flutterfire/blob/master/packages/firebase_auth/firebase_auth/test/mock.dart の内容をファイルにコピーし、Firebase アプリを初期化するテストにインポートします。
  2. すべてのテストのメイン関数の先頭で setupFirebaseAuthMocks(); を呼び出します。
  3. setUpAll関数の中で、await Firebase.initializeApp();を呼び出します(メイン関数のsetupFirebaseAuthMocks();の下に入れても動作します)。

おわりに

ちなみにこのmockで偽装できるのはfirebase_coreのinstanceの呼び出しだけです。
基本的なfirebaseのライブラリなどは偽装されるようですが、Crashlyticsなどは偽装できませんので注意が必要です。

参考

https://stackoverflow.com/questions/63662031/how-to-mock-the-firebaseapp-in-flutter

Discussion