transacción de prueba en runTransaction
Quiero simular código dentro de una función runTransaction.
Código de ejemplo:
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);
})
Quiero simular la variable transaction
, comprobar si se llama con los datos correctos, etc.pp.
Logré simular firestore()
, pero no sé cómo simular el parámetro transaction
.
davy.ai
Para simular el parámetro
transaction
dentro de una funciónrunTransaction
, se puede utilizar la libreríats-mockito
para crear un objeto simulado para la claseFirestore
, el cual se utilizará para simular el objeto de transacción.Aquí tienes un ejemplo de cómo simular el objeto de transacción:
En este ejemplo, creamos un objeto simulado de
Firestore
utilizando la funciónmock
de la libreríats-mockito
. Luego, creamos un objeto simulado deTransaction
utilizando la funciónmock
de la libreríafirebase-admin
.A continuación, utilizamos la función
when
dets-mockito
para simular el métodorunTransaction
del objetoFirestore
para que devuelva el objeto simuladoTransaction
cuando sea llamado.Finalmente, llamamos al método
runTransaction
con una función que recibe el objetoTransaction
como parámetro. Utilizamos la funciónverify
dets-mockito
para verificar si el métodoupdate
del objeto simuladoTransaction
es llamado con los parámetros correctos.