Firebase存根事务

Firebase存根事务,firebase,firebase-realtime-database,sinon,stubbing,Firebase,Firebase Realtime Database,Sinon,Stubbing,我试图在实时数据库表上存根一个事务。该事务位于触发器(非HTTP)调用的函数内。我可以触发触发器,但我不能这样存根事务: var codeRef = admin.database().ref('last_code') return codeRef.transaction(function (currentCode) { return currentCode + 1 }) .then(result => { const {error, committed, s

我试图在实时数据库表上存根一个事务。该事务位于触发器(非HTTP)调用的函数内。我可以触发触发器,但我不能这样存根事务:

var codeRef = admin.database().ref('last_code')
return codeRef.transaction(function (currentCode) {
    return currentCode + 1
})
    .then(result => {
        const {error, committed, snapshot} = result
        return snapshot.val()
    })
我正在用stub Sinon搭配摩卡。这是我尝试的方式:

const test = require('firebase-functions-test')();
adminInitStub = sinon.stub(admin, 'initializeApp');
// Now we can require index.js and save the exports inside a namespace called myFunctions.
myFunctions = require('../index');
const refParam = 'last_code';
const databaseStub = sinon.stub();
const refStub = sinon.stub();
const transactionStub = sinon.stub();
Object.defineProperty(admin, 'database', { get: () => databaseStub });
databaseStub.returns({ ref: refStub });
refStub.withArgs(refParam).returns({transaction: function(code) => ({committed: true, snapshot: 999});

但存根事务失败。我确信最后一行是错误的,但看不到解决方案。

最后我用这种方式解决:

 const obj = {
        a: (() => function(code){
          return 999
        })};

  let dbSnap = {
          val: function() {
              return 999;
          }
       };
var resolveStub = sinon.stub(obj,"a");
const result = {"error": null, "committed" : true, "snapshot" : dbSnap};
resolveStub.resolves(result);
refStub.withArgs("last_booking_code").returns({transaction:  resolveStub});