Así que ese es el primer renderizado. Hacemos nuestra afirmación. Luego esperamos hasta tener un segundo elemento en el array, y podemos hacer afirmaciones sobre él. Eso es lo bueno, porque si solo hubiera un elemento, esto simplemente lanzará y esperará a que continúe repitiéndose. Al final, incluso esperamos como 100 milisegundos, y nos aseguramos de que no haya habido otro rerenderizado en ese tiempo simplemente afirmando sobre la longitud de las instantáneas de renderizado. Esto esencialmente hace lo que necesitamos, pero honestamente, se ve horrible, y no quiero escribir al menos dos pruebas con eso, y necesito escribir cientos.
Así que al final, somos autores de bibliotecas, así que sabemos cómo construir una biblioteca, ¿verdad? Aquí es donde llegamos a un pequeño problema con esta charla, porque cuando envié esta charla, la llamé Beyond Testing Library, pero la realidad es que ahora estoy introduciendo una nueva biblioteca de pruebas. Se llama Testing Library React Render Stream, y es una nueva biblioteca de pruebas basada en ese componente profiler que vimos antes, pero ocultándolo para que no nos moleste más y podamos probar rutas de código críticas de manera confiable.
Volvamos a esa prueba que teníamos antes con un profiler y veamos cómo podemos hacerla más legible. Comienza eliminando todo este extraño envoltorio, y los resultados actuales, y las instantáneas de renderizado cosa. Simplemente avanzamos. Lo reemplazamos con algo más fácil, y decimos, crear flujo de renderizado, y obtenemos de vuelta un objeto que tiene al menos una función de reemplazo de instantánea y una función de renderizado. Podemos llamar a esa función de reemplazo de instantánea en nuestro componente con el valor de retorno de use query, y luego llamamos a la función de renderizado, que es esencialmente la misma función de renderizado con algunos ajustes que ya conocemos de testing library.
Ahora tenemos estas afirmaciones, la espera para nosotros no es agradable. Trabajar con un error aquí no es agradable, así que ¿cómo podemos cambiar esto? Tomamos una función take render de nuestro flujo de renderizado, y esa take render tiene la buena cosa de que devuelve una promesa del próximo renderizado, y el próximo renderizado que sucederá o ya ha sucedido. Podemos simplemente paso a paso siempre llamar a take render, y pasaremos por todo renderizado por renderizado por renderizado. En este caso, estoy usando esta notación con bloques de préstamo, para que pueda reutilizar nombres de variables para que no tengamos instantánea uno, instantánea dos, e instantánea tres. Simplemente decimos, tomamos la primera instantánea, y hacemos una afirmación sobre ella. Tomamos la segunda instantánea, y hacemos una afirmación sobre ella. Eso nos deja con este set timeout aquí abajo, que tampoco es agradable, así que reemplacémoslo con algo más agradable. Podemos hacer expect take render, no para volver a renderizar. Esto tiene un valor predeterminado de 100 milisegundos, pero también puedes agregar una opción y configurarlo. La última cosa aquí es que react-testing-library también tiene un render hook, y tenemos este crear flujo de renderizado con una llamada de renderizado. Podemos hacer eso más simple y si usamos un render hook a un flujo de instantáneas con un hook directamente aquí y en lugar de tener que tomar renderizados y tomar la instantánea del renderizado, la instantánea es todo lo que nos interesa cuando probamos hooks. Así que aquí podemos hacer directamente take snapshot y usar eso. Y eso es realmente una prueba bastante buena. Así que miremos hacia atrás a los requisitos especiales que teníamos antes. Teníamos ese conteo de renderizados de componentes que queríamos probar, y no podemos hacer eso. No podemos probar que no ocurran más renderizados. Y para las pruebas de consistencia, podemos probar el hook y podemos probar el componente.
Comments