升级@firebase/rules-unit-testing 2.0后相关方法失效,求对应替代方案
@firebase/rules-unit-testing 2.0.0 失效方法替代方案
2.0.0版本做了不兼容的API重构,移除了默认的命名空间导出,原有直接从全局命名空间调用方法的写法不再支持,对应功能的替代方案分为两类:
方案1:最小改动兼容迁移
如果不想调整原有业务逻辑,仅需修改导入语句,使用官方提供的兼容包即可,原有代码无需其他调整:
// 仅修改该行导入,其余代码保持不变 import * as firebase from "@firebase/rules-unit-testing/compat"; function getAdminFirestore() { return firebase.initializeAdminApp({ projectId: projectID }).firestore(); } function getFirestore(auth?: TokenOptions) { return firebase.initializeTestApp({ projectId: projectID, auth: auth }).firestore(); } beforeEach(async () => { await firebase.clearFirestoreData({ projectId: projectID }); }); after(async () => { await firebase.clearFirestoreData({ projectId: projectID }); });
方案2:使用新版模块化API(推荐长期迭代使用)
新版API采用具名导入的方式,适配Firebase v9+的模块化规范,调整后的写法如下:
// 单独导入需要用到的测试方法 import { initializeTestApp, initializeAdminApp, clearFirestoreData } from "@firebase/rules-unit-testing"; // 配合Firebase v9+的模块化Firestore方法使用 import { getFirestore } from "firebase/firestore"; function getAdminFirestore() { const adminApp = initializeAdminApp({ projectId: projectID }); return getFirestore(adminApp); } function getFirestore(auth?: TokenOptions) { const testApp = initializeTestApp({ projectId: projectID, auth: auth }); return getFirestore(testApp); } beforeEach(async () => { await clearFirestoreData({ projectId: projectID }); }); after(async () => { await clearFirestoreData({ projectId: projectID }); });
注意事项
- 2.0.0及以上版本要求项目配套使用Firebase v9及更高版本的SDK,如果你仍在使用v8及更低版本的Firebase,建议优先使用兼容包方案迁移
- 你用到的
initializeAdminApp、clearFirestoreData、initializeTestApp方法本身功能没有调整,仅导入方式发生变化
内容的提问来源于stack exchange,提问作者Agung
相关产品推荐
相关产品推荐

