我将Firebase云功能更新到v1.0.1,并决定使用新的单元测试功能来实现它。
有一个问题我无法找到解决方案:
exports.updateBestTime = functions.firestore
.document("users/{userId}/exercises/{exercise}/times/{timeId}")
.onCreate((snap, context) => {
console.log(context)
...
调用此函数时,snap
是正确的,snap.ref
指向我传递的文档。应包含context.params
,userId
和exercise
的通配符值的timeId
为空。
这是console.log(context)
:
{ service: 'firestore.googleapis.com',
name: 'projects/focos-debug/databases/(default)/documents/users/userId5/exercises/exercise4/times/timeId6' },
eventType: 'providers/cloud.firestore/eventTypes/document.create',
timestamp: '2018-04-07T09:17:42.500Z',
params: {} }
我对JavaScript没有多少经验,所以这可能是我的错。你能帮帮我吗?
以下是我用于测试的代码:
const handstandTimePath = 'users/OLlJ3NFcgYXqS8T5vetYVKjzFbo1/exercises/handstand/times/test';
const snap = test.firestore.makeDocumentSnapshot(
{time: 30},
handstandTimePath
);
// Call the wrapped function with the constructed snapshot.
const wrapped = test.wrap(myFunctions.updateBestTime);
return wrapped(snap).then(function() {
return firestore.doc(handstandTimePath).get();
}).then(function(createdSnap) {
assert.property(createdSnap.data(), 'dateAndTime');
assert.property(createdSnap.data(), 'time');
assert.include(createdSnap.data(), {time: 30});
})
答案 0 :(得分:0)
解决方案是将params
作为附加参数传递给包装函数。
例如:
let data = test.database.makeDataSnapshot({
valProp1: "hello",
valProp2: 12345
}, "my/path/param1/param2");
await test.wrap(myFunctions.func1)(data,
{
params: {
param1: userId,
param2: orderId
}
});
如此issue中所示。