4

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

4

1 回答 1

3

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

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

于 2021-12-02T16:01:40.183 回答