测试我的 gen2 onDocumentUpdate 函数。但函数中的变化数据并不如预期。有人能看到发生了什么事吗?
这是代码的精简版本:
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);
});
});
快照看起来像这样(部分)。我觉得不错。 “改变”对象对我来说也看起来不错。
{
_fieldsProto: {
we_id: {
integerValue: 12054,
},
show_id: {
integerValue: 45,
},
cakepull: {
booleanValue: true,
},
// ..... more props
}
但奇怪的是。在实际函数中,event.data.after.data() 的值如下所示:
{
aString: "foo",
anObject: {
a: "qux",
b: "faz",
},
aNumber: 7,
}
此外,当在模拟器 UI 中手动更改文档时,函数中的数据符合预期......
有什么想法吗?谢谢!
编辑:这是 firebase 函数测试包装器(测试中的 #init 函数),也许设置不正确?
import firebaseFunctionsTest from 'firebase-functions-test';
const init = () => {
return firebaseFunctionsTest({
projectId: 'dev',
});
};
export { init };
通过像这样传递更改来修复:
await wrapped({ data: change });
看
从 firebase-functions-test 调用时,onDocumentCreated Firebase 函数中的数据和参数未定义
和
https://github.com/firebase/firebase-functions-test/issues/205#issuecomment-1855885136