首页 > 解决方案 > 使用 Jest 在线测试 Firestore 时出错:“Auth error:TypeError: fetch is not a function”

问题描述

我正在尝试使用 Jest 测试 Cloud Firestore,但出现以下错误。

const admin = require('firebase-admin');
const serviceAccount = require("../../../config/YOUR-PROJECT-NAME-firebase-adminsdk-XXXX-XXXXXX.json");

// const myfirestore: any = new MyFireStore()

describe('MyFirestore', () =>{
  it('getDocument', async () => {

    admin.initializeApp({
      credential: admin.credential.cert(serviceAccount),
      databaseURL: "https://unittest-dfb64.firebaseio.com"
    });

    let result = false
    const db = admin.firestore();
    const collectionRef = db.collection('test')
    const docRef = collectionRef.doc('testDoc')
    const getDoc = await docRef.get()
    if (getDoc && getDoc.exists) {
      result = getDoc.data()
    }

    expect(result).toEqual('testdata')
  }, 100000)

“身份验证错误:TypeError:获取不是函数”。

我用谷歌搜索了很多,但找不到有关此错误的任何提示。在 Jest 测试中访问 Firestore 数据的正确方法是什么?非常感谢您提前提供的帮助。

完整的代码在这里上传。

https://github.com/goodpic/firebase-graphql-boilerplate

我检查并尝试了这些文档,但无法弄清楚这个错误的根源是什么。

https://firebase.google.com/docs/functions/unit-testing https://github.com/firebase/functions-samples/blob/master/quickstarts/uppercase/functions/test/test.online.js https: //gist.github.com/starhoshi/21d1fb870d485a95c86fe93cfe1ac240

标签: javascriptfirebasegoogle-cloud-firestorejestjsgoogle-cloud-functions

解决方案


我终于找到了这个问题的根源。该问题是由 jest 和 gaxios 项目之间的不兼容引起的。

https://github.com/firebase/firebase-admin-node/issues/512#issuecomment-487218219

作为该问题的解决方法,我可以通过将 gaxios 降级到 1.8.3 来解决,如评论中所述。

"dependencies": {
    "firebase-admin": "^7.3.0",
    "gaxios": "1.8.3"
  },
  "resolutions": {
    "**/gaxios": "1.8.3"
  },


推荐阅读