es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para simular el parámetro transaction dentro de una función runTransaction, se puede utilizar la librería ts-mockito para crear un objeto simulado para la clase Firestore, el cual se utilizará para simular el objeto de transacción.

    Aquí tienes un ejemplo de cómo simular el objeto de transacción:

    import { Firestore } from '@google-cloud/firestore';
    import * as admin from 'firebase-admin';
    import { instance, mock, when, verify } from 'ts-mockito';
    
    // crear un objeto de Firestore simulado
    const firestoreMock = mock(Firestore);
    
    // crear un objeto de transacción simulado
    const transactionMock = mock(admin.firestore.Transaction);
    
    // simular el método runTransaction de Firestore para que retorne el objeto de transacción simulado
    when(firestoreMock.runTransaction((transaction: admin.firestore.Transaction) => transaction))
      .thenCall((fn) => fn(instance(transactionMock)));
    
    // llamar al método runTransaction con el objeto de Firestore simulado
    await admin.firestore().runTransaction(async (transaction) => {
      // verificar que el objeto de transacción es el objeto simulado
      verify(transactionMock).update(instance(hubDocument), newData);
    });
    

    En este ejemplo, creamos un objeto simulado de Firestore utilizando la función mock de la librería ts-mockito. Luego, creamos un objeto simulado de Transaction utilizando la función mock de la librería firebase-admin.

    A continuación, utilizamos la función when de ts-mockito para simular el método runTransaction del objeto Firestore para que devuelva el objeto simulado Transaction cuando sea llamado.

    Finalmente, llamamos al método runTransaction con una función que recibe el objeto Transaction como parámetro. Utilizamos la función verify de ts-mockito para verificar si el método update del objeto simulado Transaction es llamado con los parámetros correctos.

Comments are closed.