我想在runTransaction函数中模拟代码。
示例代码:
await admin.firestore().runTransaction(async transaction => {
const hubDocument = admin.firestore().collection("Acme").doc('4');
const hubData = (await transaction.get(hubDocument)).data();
newData = {
...hubData,
someAttribute: 'some new value'
};
transaction.update(hubDocument, newData);
})
我想模拟transaction
,检查它是否用正确的数据etc.pp.调用
我设法模拟了firestore()
,但不知道如何模拟transaction
参数。
我还没有测试过,但我认为这样的东西应该可以做到:
import { Transaction } from '@google-cloud/firestore';
const origTransactionGet = Transaction.prototype.get
Transaction.prototype.get = function () {
console.log(arguments, "< Intercepted Transaction.prototype.get")
return origTransactionGet.apply(this, arguments)
}
// your code
await admin.firestore().runTransaction(async transaction => {
const hubDocument = admin.firestore().collection("Acme").doc('4');
const hubData = (await transaction.get(hubDocument)).data();
newData = {
...hubData,
someAttribute: 'some new value'
};
transaction.update(hubDocument, newData);
})
正如@FiodorovAndrei所评论的那样,如果你使用jest
,另一种可能更舒服的选择是使用firestore的笑话mock来嘲笑firestore的功能。