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

Firestore测试中使用FieldValue.arrayUnion报错问题

解决Firebase v9测试中FieldValue.arrayUnion报错问题

问题原因

你在测试代码中使用的FieldValue大概率来自firebase-admin SDK,但测试环境用的是Firebase v9 JavaScript模块化SDK,两者的FieldValue对象不兼容——v9的Firestore实例无法识别admin SDK的ArrayUnionTransform类型,直接导致报错。

解决方案

1. 导入v9 SDK对应的FieldValue

确保测试代码中导入的是Firebase v9 Firestore模块的FieldValue,而非firebase-admin的版本:

// 正确导入v9的FieldValue
import { FieldValue } from "firebase/firestore";

如果之前代码里是从firebase-admin/firestore导入的FieldValue,直接替换成上述语句即可。

2. 验证核心逻辑(可选)

你通过testEnv.unauthenticatedContext().firestore()获取v9 Firestore实例的逻辑是正确的,无需修改。修正FieldValue导入后,重新运行测试,arrayUnion操作就能被v9的Firestore实例正常识别。

修正后的核心代码示例

// 顶部导入正确的FieldValue
import { FieldValue } from "firebase/firestore";

beforeAll(async () => {
  process.env.GCLOUD_PROJECT = "my-project-id";
  process.env.FIRESTORE_EMULATOR_HOST = "127.0.0.1:8086";

  testEnv = await initializeTestEnvironment({
    projectId: projectId,
    firestore: {
      rules: readFileSync("firestore.rules", "utf8"),
      host: "127.0.0.1",
      port: 8086
    }
  });

  const unauth = testEnv.unauthenticatedContext();
  db = unauth.firestore();

  connectFirestoreEmulator(db, "127.0.0.1", 8086);

  const washingtonRef = db.collection("cities").doc("DC");

  await washingtonRef.set({ regions: [] });

  // 现在使用v9的FieldValue,可被正常解析
  await washingtonRef.update({
    regions: FieldValue.arrayUnion({a: 0})
  });

  const doc = await washingtonRef.get();
  if (!doc.exists) {
    console.log("No such document!");
  } else {
    console.log("Document data:", doc.data());
  }
})

内容的提问来源于stack exchange,提问作者m_cht

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 16:51:25