Bromea con la misma función dos veces con diferentes argumentos

2 minutos de lectura

Avatar de usuario de Simon Leyendecker
Simón Leyendecker

Soy nuevo en JEST y actualmente estoy probando un componente de Javascript que realiza una llamada a la API en su onComponentDidMount. Dependiendo de los datos de retorno de la llamada ajax (llamada api), mi componente muestra una tabla o un texto simple.

Mi prueba JEST es bastante simple, por ahora solo estoy probando para que coincida con las instantáneas actuales. Entonces, dado que mi llamada API puede devolver datos diferentes, mi instantánea puede tener dos aspectos diferentes: 1) uno con una tabla 2) uno con un texto simple.

Me burlé con éxito del servicio así.

jest.mock("/myService", () => ({
  index: (data, callback) => {
    const return = [
      {
        {...}
      },
    ]
    callback(return)
  },
}))

Mi componente hace el myService.index() llame correctamente, todo lo que deseo es pasarle diferentes valores que usará para realizar la devolución de llamada.

Así es como se ve

it("has proper snapshot", () => {
    const props = {...}
    const component = shallow(<MyComponent {...props} />)
    expect(component).toMatchSnapshot()
  })

Esto funciona muy bien para el primer ejemplo, pero parece que no puedo encontrar una respuesta correcta que me convenga. Me puedes ayudar ? 🙂

avatar de usuario de klugjo
klugjo

1- Si desea que el simulacro arroje resultados diferentes en cada llamada:

Utilizar simulacroReturnValueOnce

myMock
  .mockReturnValueOnce(10)
  .mockReturnValueOnce('x')
  .mockReturnValue(true);

regresará 10 en la primera llamada, 'x' en la segunda llamada y true en cualquier momento después de eso.

2- Si quieres comprobar los argumentos con los que se ha llamado al simulacro:

Utilizar haber sido enésimo llamado con

expect(mock).toHaveBeenNthCalledWith(1, '1st call args');
expect(mock).toHaveBeenNthCalledWith(2, '2nd call arg 1', '2nd call arg 2');

afirmará que

  • la mock fue llamado con '1st call args' la primera vez que se llamó -> mock('1st call args')

  • la mock fue llamado con '2nd call arg 1' y '2nd call arg 2' la segunda vez se llamó -> mock('2nd call arg 1', '2nd call arg 2')

3- Si desea una respuesta específica basada en el parámetro de función

No es compatible con jest de forma predeterminada, pero puedes echarle un vistazo broma-cuando que le permite hacer algo como:

when(fn).calledWith(1).mockReturnValue('yay!')

  • No sabía sobre toHaveBeenNthCalledWith, se ve tan práctico, ¡gracias amigo!

    – Simón Leyendecker

    7 de febrero de 2020 a las 13:15

  • Ojalá los documentos de Jest fueran tan útiles y concisos. Gracias.

    –Matt Trax

    15 de diciembre de 2020 a las 16:18

  • ¿Podemos usar esto para probar ganchos que devuelven un valor booleano en un componente?

    –Sri Vineeth

    25 de julio de 2022 a las 1:28

Por favor, checa el documentos de broma en este. Puede devolver diferentes valores cuando se burla de una función y una vez devolver un valor que desee y luego un valor diferente.

  • Muy bien, eso ya es mucha ayuda. Pero, ¿qué hay de pasar valores a este simulacro? Básicamente quiero pasar a ella {a: 1, b:2} en un caso y {} en otro caso

    – Simón Leyendecker

    21 dic 2018 a las 15:35

¿Ha sido útil esta solución?