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
相关产品推荐
相关产品推荐

