前提・実現したいこと
firebaseを使ったプロジェクトでfirestoreのテストをしようとしているのですが、initializeAppだとセキュリティルールを通らないので、jest.mockでinitializeTestAppに置き換えたいです。
発生している問題・エラーメッセージ
再現したコードはこれです
https://codesandbox.io/s/amazing-galois-dcmu8?file=/src/App.test.js
これをテストすると、以下のようなエラーが出ます。
テスト前にEmulatorを起動していますが、起動しなくても同じエラーがでます。
● Test suite failed to run TypeError: Cannot read property 'firestore' of undefined 2 | import "firebase/firestore"; 3 | const app = firebase.initializeApp({ projectId: "fakeId" }); > 4 | export const db = app.firestore(); | ^ 5 | 6 | export const dbManipulation = () => { 7 | db.collection("users").add({ hoge: "fuga" });
なお、codesandbox自体のバグでjest.mock is not a function というエラーが出ますが、実際には上記のエラーがでます。
File > Export to ZIP
でダウンロードできます。
該当のソースコード
試したこと
- jest.mock("firebase")に変えた
- jest.spyOn(firebase, "initializeApp).mockImplementation(...)にしてみた
- jest.mock("firebase/app", ()=> {return {initializeApp: initializeTestApp}})
とか、色々やりましたが全て駄目でした。Manual mockは試していないです。
console.log(initializeApp)
とすると、mockされてることが分かるので、jest.mockは効いているようですが、mockImplementationがどうも適用されていないみたいです。
補足情報(FW/ツールのバージョンなど)
- create-react-app
- Firebase Local Emulator Suite
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。