You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级@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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 12:42:04