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

Firebase Gen2 onDocumentUpdate测试中变更数据异常问题排查

Firebase Gen2 onDocumentUpdate函数测试时数据不符合预期

我在测试Firebase Gen2的onDocumentUpdate函数时,发现函数内获取的变更数据和预期不符:手动在模拟器UI修改文档时数据正常,但单元测试中函数拿到的数据完全不对,求帮忙排查问题。


函数精简代码

import { onDocumentUpdated } from 'firebase-functions/v2/firestore';

export const onPrizeUpdate = onDocumentUpdated('prizes/{prize}', (event) => {
  const data = event.data.after.data();

  return data;
});

单元测试代码

const functions = init(); // firstbase functions tests instance
const wrapped = functions.wrap(onPrizeUpdate); // wrapped function

describe('prize is pulled', () => {
  let change, beforeSnap, afterSnap;
  beforeEach(async () => {
    beforeSnap = functions.firestore.makeDocumentSnapshot(prize, `prizes/id`);
    afterSnap = functions.firestore.makeDocumentSnapshot(
      { ...prize, winner: user, winner_uid: user.uid },
      `prizes/id`
    );
    change = functions.makeChange(beforeSnap, afterSnap);
    await wrapped(change);
  });

  it('updates did_cakepull', async () => {
    // console.log('user', user);
    expect(user['show_1_did_cakepull']).toEqual(true);
  });
});

数据异常情况

  • 测试中生成的afterSnap数据(部分)符合预期:
{
  _fieldsProto: {
    we_id: {
      integerValue: 12054,
    },
    show_id: {
      integerValue: 45,
    },
    cakepull: {
      booleanValue: true,
    },
 // ..... 更多属性
}
  • 但函数内event.data.after.data()实际返回的数据完全不符:
{
  aString: "foo",
  anObject: {
    a: "qux",
    b: "faz",
  },
  aNumber: 7,
}
  • 手动在模拟器UI修改文档时,函数内获取的数据符合预期。

测试初始化代码

import firebaseFunctionsTest from 'firebase-functions/test';

const init = () => {
  return firebaseFunctionsTest({
    projectId: 'dev',
  });
};

export { init };

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:44:55