Firebase存根事务
我试图在实时数据库表上存根一个事务。该事务位于触发器(非HTTP)调用的函数内。我可以触发触发器,但我不能这样存根事务: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
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});