runTransaction中的模拟事务



我想在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的功能。

最新更新