¿Cómo realizar una prueba unitaria de los ganchos de reacción mediante el montaje superficial de los componentes funcionales de React?

Desarrollador JS

¿Hay alguna manera de probar componentes funcionales construidos usando ganchos React mediante un montaje superficial del componente? Me encontré con Enzyme no compatible useEffect( https://airbnb.io/enzyme/#react-hooks-support ) y otros ganchos con una representación superficial de un componente y no quiero entrar en el montaje.

También resultó react-testing-libraryser una alternativa nueva y popular. ¿Es una mejor opción en comparación con Enzyme? Ya lo he Enzymeusado para probar componentes basados ​​en clases. Entonces, hay un dolor involucrado en reescribirlos.

awran5

Sí, puedes, pero necesitarás usar espías . Por ejemplo, si está usando jest, puede usar jest.spyOn con mockImplementationOnce () , también debería funcionar con otras spyingbibliotecas.

Ejemplo de uso:

describe("React useEffect", () => {
  let useEffect, wrapper

  let mockUseEffect = () => {
    useEffect.mockImplementationOnce(f => f())
  }

  beforeEach(() => {
    useEffect = jest.spyOn(React, "useEffect")

    mockUseEffect()
    wrapper = shallow(<SomeComponent />)
  })

  it("your test", () => {
     // using wrapper
  })
}

Aquí hay un bonito artículo detallado de "Will Ockelmann-Wagner" y agregué un ejemplo de trabajo de codeSandbox .


Aunque funciona, te animo a que no uses shallowrenderizado y empieces a usar react-testing-library(llamado @ testing-library / react hoy en día). Es una solución de prueba ligera y bien documentada, y yo diría que es la prueba "más cercana" que puedes llegar a escenarios del mundo real. Viene ya con CRA por defecto.

Aquí hay un ejemplo básico de codeSandbox y aquí hay más ejemplos de React Docs.

Además, aquí hay un gran video de Kent C. Dodds que aborda las diferencias entre el shallowrenderizado y el renderenfoque de la biblioteca de pruebas de reacción.

Este artículo se recopila de Internet, indique la fuente cuando se vuelva a imprimir.

En caso de infracción, por favor [email protected] Eliminar

Editado en
0

Déjame decir algunas palabras

0Comentarios
Iniciar sesiónRevisión de participación posterior

Artículos relacionados