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.

¿Burlarse de las funciones auxiliares privadas con Jest?

Como traductor de documentos de TI, traduzco lo siguiente al español. No traduzca el código y la salida en markdown.

Por ejemplo, si tiene el módulo:

//sumWrapper.js
const sum = (a, b) => {
  return a + b;
};

const sumWrapper = (a, b) => {
  return sum(a, b);
};
export default sumWrapper;

Y está intentando probar la función sumWrapper. Sin embargo, le gustaría burlarse de la función sum

const sum = jest.fn((a, b) => a * b);

Sin embargo, debido a que esta implementación no se proporcionó a sumWrapper cuando se definió, sum todavía realiza la función de adición original.
¿Cuál sería la mejor manera de burlarse de esta implementación y permitir que sumWrapper tenga acceso a la nueva función de burla de multiplicación de sum?

Esto es útil para mí porque tengo una función getAddress() que obtiene la dirección de un contrato inteligente dependiendo de la red actual. Me gustaría burlarme de la función getNetwork proporcionada por web3 para devolver una red de mi elección para probar mejor el código.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para simular la implementación de la función sum en el módulo sumWrapper, podemos utilizar la función de simulación de jest. Así es cómo:

    1. Importa la función sum del módulo sumWrapper:
    import { sum } from './sumWrapper';
    
    1. Crea una implementación de simulación para la función sum utilizando jest.fn():
    sum.mockImplementation((a, b) => a * b);
    
    1. Esto reemplazará la implementación original de sum con la nueva implementación de multiplicación. Ahora, si llamamos la función sumWrapper, usará la nueva implementación de sum.

    Por ejemplo:

    expect(sumWrapper(2, 3)).toBe(6);
    

    En el caso de la función getAddress(), podemos simular de manera similar la función getNetwork proporcionada por web3 para que devuelva una red de nuestra elección. Así es cómo:

    1. Importa la función getNetwork de web3:
    import web3 from 'web3';
    const { getNetwork } = web3;
    
    1. Crea una implementación de simulación para la función getNetwork utilizando jest.fn():
    getNetwork.mockImplementation(() => ({
      id: 1,
      name: 'main'
    }));
    
    1. Esto reemplazará la implementación original de getNetwork con la nueva implementación que siempre devuelve la red principal. Ahora, si llamamos la función getAddress(), usará nuestra función getNetwork simulada.

    Por ejemplo:

    expect(getAddress()).toBe('0x0000000000000000000000000000000000000000');
    

    Esto nos permite probar la función getAddress() sin depender de la red actual, que podría no estar siempre disponible o ser consistente.

Comments are closed.