【问题标题】:mock transaction in runTransactionrunTransaction 中的模拟事务
【发布时间】:2022-01-01 02:25:15
【问题描述】:

我想在 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 参数。

【问题讨论】:

标签: node.js google-cloud-firestore firebase-admin ts-mockito


【解决方案1】:

我没有对此进行测试,但我认为这样的事情应该可以解决问题:

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 功能。

【讨论】:

    猜你喜欢
    • 2022-01-04
    • 2013-01-03
    • 2014-01-15
    • 1970-01-01
    • 2010-10-22
    • 2020-09-10
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多