runTransaction 中的模拟交易
mock transaction in 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-jest-mock 来模拟 Firestore 功能。
我想在 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-jest-mock 来模拟 Firestore 功能。