Jest/Typescript测试Firebase/Firestore管理SDK的最佳实践

Jest/Typescript测试Firebase/Firestore管理SDK的最佳实践,typescript,firebase,google-cloud-firestore,jestjs,firebase-cli,Typescript,Firebase,Google Cloud Firestore,Jestjs,Firebase Cli,我正在编写一个应用程序,其后端编写为节点/快速服务器,通过firebase函数上的Admin SDK运行firestore命令。我想知道测试数据库功能的最佳方法是什么。此类功能的一个示例如下: export const deleteDocument = async(id: string): Promise<void> => { try { await firestore.collection("sampleCollection").d

我正在编写一个应用程序,其后端编写为节点/快速服务器,通过firebase函数上的Admin SDK运行firestore命令。我想知道测试数据库功能的最佳方法是什么。此类功能的一个示例如下:

export const deleteDocument = async(id: string): Promise<void> => {
    try {
        await firestore.collection("sampleCollection").doc(id).delete();
    } catch (e) {
        throw new Error(`Could not delete ${id}`);
    }
}
我这样定义我的
firestore
实例:

import * as admin from 'firebase-admin';
const firebase = admin.initializeApp({credential: admin.credential.cert(...), ...otherConfig});
const firestore = firebase.firestore();
export {firebase, firestore};
这将导致一个具有管理员权限的初始化firebase应用程序。然后我运行
firebase emulator:start——仅firestore,函数
,它在模拟器上启动后端。现在,我可以在express server上创建的端点上运行“/delete/:id”,该端点运行函数
deleteDocument
。当我通过触发该函数“手动”执行此操作时,效果非常好。问题是我何时要运行测试。出于某种原因,即使已将
FIREBASE\u emulator\u PORT
环境变量设置为正确的值,测试本身也不会连接到仿真器

我确实尝试使用了
@firebase/testing
的.initializeAdminApp()方法,但是该方法中的firestore类型与
firestore admin中的
admin.initializeApp()
中的firestore类型崩溃,这使得我看起来无法在测试中使用函数切换数据库,如图所示。我还希望避免模仿这些函数,而是尽可能地使用模拟器

所以我的问题是我真的不知道如何运行测试。如果在运行仿真器时执行此操作,则测试将从生产firestore而不是仿真器获取数据,即使函数上的express server将数据正确加载到firestore仿真器


非常感谢您的帮助,如果您需要更多信息,我很乐意提供。

请不要编写
async
函数,这些函数不
等待
,请阅读,我将编辑函数,但正如您所见,它并不严格相关。谢谢你的帖子!
import * as admin from 'firebase-admin';
const firebase = admin.initializeApp({credential: admin.credential.cert(...), ...otherConfig});
const firestore = firebase.firestore();
export {firebase, firestore};