firebase-functions-test
firebase-functions-test copied to clipboard
Wrapped Gen 2 Firestore Trigger receives incorrect data
Version info
firebase-functions-test: 5.0.1
firebase-functions: 3.3.0
firebase-admin: 12.2.0
Test case
When calling a wrapped function set to a Gen 2 Firestore trigger, the function will receive the value for the exampleDocumentSnapshot, rather than the actual value provided by the test:
/// Test Code
test("Write Item V2", async () => {
const db = getFirestore()
const path = `items/${generateTempId()}`
const data = {name: "MyTest"}
await db.doc(path).set(data)
testEnv.firestore.exampleDocumentSnapshotChange()
const wrapped = testEnv.wrap(myOnWriteTrigger)
const beforeSnap = testEnv.firestore.makeDocumentSnapshot({name:'blah'}, path)
const afterSnap = testEnv.firestore.makeDocumentSnapshot(data, path)
const change = testEnv.makeChange(beforeSnap, afterSnap)
await wrapped(change)
})
/// Cloud Function
export const myOnWriteTrigger = onDocumentWritten("items/{itemid}", async (event) => {
///This will output "{ aString: 'foo', anObject: { a: 'qux', b: 'faz' }, aNumber: 7 }"
console.log(event.data.after.data())
///...
}
Steps to reproduce
I've created a sample project with the issue at https://github.com/MichaelJBerk/FirestoreFunctionsTriggerBug. View the readme for details
Expected behavior
event.data.after.data() should contain the data provided in the test
Actual behavior
event.data.after.data() contains the exampleDocumentSnapshot value ({ aString: 'foo', anObject: { a: 'qux', b: 'faz' }, aNumber: 7 })
Lol I thought I was just doing something wrong.
The Google Cloud CLI is defaulting to v2 as of now. Let's fix testing v2 functions)
Hi @MichaelJBerk
Thanks for creating this issue! I've managed to reproduce this, and I will soon be looking further into it.
By any chance, did you ever figure this out?
In the end I don't think I was able to, though it has been a while since I last played with Firebase
Damn, I wasn't understand why the hell I was receiving wrong data. Then. This.