Я пытаюсь заглушить транзакцию по таблице базы данных в реальном времени. Транзакция находится внутри функции, вызываемой триггером (не 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()
})
Я использую заглушку Sinon с mocha Модульное тестирование облачных функций . Вот как я пытался:
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});
Но транзакция-заглушка не удалась. Я уверен, что последняя строка неверна, но не вижу решения.