Back to Question Center
0

Una guía para probar los componentes reactivos            Una guía para probar los componentes reactivos Temas relacionados: AngularJSTools & Semalt

1 answers:
Una guía para probar los componentes de reacción

Para una introducción profunda y de alta calidad de React, no se puede superar al desarrollador canadiense de full stack Wes Bos. Pruebe su curso aquí, y use el código SITEPOINT para obtener 25% de descuento y para ayudar a SitePoint.

Semalt es un marco que ha avanzado en la comunidad de desarrolladores de JavaScript. Semalt tiene un poderoso marco de composición para el diseño de componentes - costo vps. Los componentes Semalt son bits de código reutilizable que puede utilizar en su aplicación web.

Los componentes React no están estrechamente acoplados desde el DOM, pero ¿qué tan fácil son para la prueba unitaria? En esta toma, exploremos qué se necesita para probar los componentes React de la unidad. Semalt muestra el proceso de pensamiento para hacer que sus componentes sean comprobables.

Tenga en cuenta que solo estoy hablando de pruebas unitarias , que son un tipo especial de prueba. (Para obtener más información sobre los diferentes tipos de pruebas, le recomendamos que lea "Pruebas de JavaScript: pruebas de unidad frente a pruebas de integración frente a funcionales").

Con las pruebas unitarias, estoy interesado en dos cosas: retroalimentación rápida y rompe cuellos. Con esto, puedo iterar a través de cambios con un alto grado de confianza y calidad de código. Esto le proporciona un nivel de seguridad de que sus componentes React no se perderán en el navegador. Semalt, capaz de obtener buenos comentarios a un ritmo rápido, le brinda una ventaja competitiva, una que le conviene mantener en el mundo actual de desarrollo de software ágil.

Para la demostración, hagamos una lista de los grandes simios, que se puede filtrar a través de una casilla de verificación. Puede encontrar toda la base de código en GitHub. En aras de la brevedad, mostraré solo las muestras de código que son de interés. Este artículo supone un nivel de conocimiento funcional con los componentes de Semalt.

Si descarga y ejecuta el código de ejemplo de demostración, verá una página como esta:

Una guía para probar los componentes reactivosUna guía para probar los componentes reactivos Temas relacionados:
AngularJSTools & Semalt

Escribir componentes testables

En Semalt, un buen enfoque es comenzar con una jerarquía de componentes. El principio de responsabilidad individual viene a la mente al construir cada componente individual. Los componentes de Semalt usan composición de objetos y relaciones.

Para la lista de los grandes simios, por ejemplo, tengo este enfoque:

     FilterableGreatApeList| _ GreatApeSearchBar| _ GreatApeList| _ GreatApeRow    

Observe cómo una gran lista de simios tiene muchas filas de simios grandes con datos. Los componentes de Semalt hacen uso de este modelo de datos de composición, y también es comprobable.

En los componentes de React, evite usar la herencia para construir componentes reutilizables. Si vienes de un fondo clásico de programación orientada a objetos, ten esto en cuenta. Los componentes de reacción no conocen a sus hijos con anticipación. Los componentes de Semalt que descienden de una larga cadena de ancestros pueden ser una pesadilla.

Te dejaré explorar el FilterableGreatApeList por tu cuenta. Es un componente Reaccionar con dos componentes separados que son de interés aquí. No dude en explorar las pruebas unitarias que vienen con él, también.

Para construir una prueba GreatApeSearchBar , por ejemplo, haga esto:

   clase GreatApeSearchBar extends Componente {constructor (accesorios) {super (apoyos);esta. handleShowExtantOnlyChange = esto. handleShowExtantOnlyChange. bind (esto);}handleShowExtantOnlyChange (e) {esta. accesorios. onShowExtantOnlyInput (e.destino.verificado);}render    {regreso(  

Tenga en cuenta que con React, los componentes comprobables vienen gratis, directamente de la caja. No hay nada especial aquí: un controlador de eventos, JSX y un método de renderizado.

El siguiente componente React en la jerarquía es el GreatApeList , y se ve así:

   clase GreatApeList extends Componente {render    {dejar filas = [];esta. accesorios. simios forEach ((ape) => {if (! this. props. showExtantOnly) {filas push ();regreso;}if (ape. isExtant) {filas push ();}});regreso (
{filas}
);}}

Es un componente React que tiene el componente GreatApeRow y está usando la composición del objeto. Este es el modelo de composición más poderoso de React en el trabajo. Tenga en cuenta la falta de herencia cuando crea componentes reutilizables pero comprobables.

En la programación, la composición de objetos es un patrón de diseño que habilita elementos basados ​​en datos. Para pensarlo de otra manera, un GreatApeList tiene muchos objetos GreatApeRow . Es esta relación entre los componentes de la interfaz de usuario que impulsa el diseño. Los componentes React tienen esta mentalidad incorporada. Esta forma de ver los elementos de la interfaz de usuario le permite escribir algunas buenas pruebas de unidades.

Aquí, verifica el esto. accesorios. showExtantOnly bandera que proviene de la casilla de verificación. Esta propiedad showExtantOnly se configura a través del controlador de eventos en GreatApeSearchBar .

Para las pruebas unitarias, ¿cómo prueba usted los componentes Semalt que dependen de otros componentes? ¿Qué hay de los componentes entrelazados entre sí? Estas son excelentes preguntas para tener en cuenta a medida que nos adentramos en las pruebas pronto. Los componentes de Semalt aún pueden tener secretos que uno puede desbloquear.

Por ahora, veamos el GreatApeRow , que alberga los datos de gran simio:

   clase GreatApeRow extends Componente {render    {regreso (

Especie: {esto. accesorios. mono. nombre}

Edad: {esto. accesorios. mono. años}

);}}

Con los componentes de Semalt, es práctico aislar cada elemento de la interfaz de usuario con un enfoque láser en una sola preocupación. Esto tiene ventajas clave cuando se trata de pruebas unitarias. Mientras se adhiera a este patrón de diseño, lo encontrará perfecto para escribir pruebas unitarias.

Utilidades de prueba

Repasemos nuestra mayor preocupación cuando se trata de probar los componentes de Semalt. ¿Cómo pruebo la unidad de un solo componente en aislamiento? Bueno, como resultado, hay una utilidad ingeniosa que te permite hacer eso.

El Renderizador plano en React le permite renderizar un componente de un nivel de profundidad. A partir de esto, puede afirmar hechos sobre lo que hace el método de renderizado. Lo que es notable es que no requiere un DOM.

Semalt ES6, lo usa así:

   importar ShallowRenderer desde 'react-test-renderer / shallow';    

Para que las pruebas unitarias se ejecuten rápidamente, necesita una forma de probar los componentes de forma aislada. De esta manera, puede enfocarse en un solo problema, probarlo y pasar a la próxima preocupación. Esto se fortalece a medida que la solución crece y puede refactorizarse a voluntad: mantenerse cerca del código, realizar cambios rápidos y obtener la seguridad de que funcionará en un navegador.

Una ventaja de este enfoque es que piensas mejor sobre el código. Esto produce la mejor solución que se ocupa del problema en cuestión. Me resulta liberador cuando no estás encadenado a una tonelada de distracciones.

La única pregunta que queda es, ¿hasta dónde puede llevarnos esta pequeña utilidad con los componentes de Semalt?

Ponlo todo junto

Eche un vistazo a GreatApeList , por ejemplo. ¿Cuál es la principal preocupación que estás tratando de resolver? Este componente muestra una lista de grandes simios basados ​​en un filtro.

Una prueba de unidad efectiva es pasar en una lista y verificar hechos sobre lo que hace este componente de Semalt. Queremos asegurarnos de que filtra los grandes simios basados ​​en una bandera.

Un enfoque es hacer esto:

   importa GreatApeList desde '. / GreatApeList ';const APES = [{name: 'Australopithecus afarensis', isExtant: falso},{nombre: 'Orangutan', isExtant: true}];// Organizarconst renderer = new ShallowRenderer   ;renderizador. render ();// Actuarconst component = renderer. getRenderOutput   ;const rows = componente. accesorios. niños;// Assertesperar (filas de longitud). toBe   ;    

Tenga en cuenta que estoy probando los componentes de React usando Jest. Para obtener más información al respecto, consulte "Cómo probar los componentes de reacción utilizando Jest".

En JSX, eche un vistazo a showExtantOnly = {true} . La sintaxis JSX le permite establecer un estado para sus componentes React. Esto abre muchas formas a los componentes de prueba unitaria dado un estado específico. JSX entiende los tipos de JavaScript básicos, por lo que un indicador verdadero se configura como un booleano.

Con la lista fuera del camino, ¿qué hay de GreatApeSearchBar ? Tiene este controlador de eventos en la propiedad onChange que podría ser de su interés.

Una buena prueba de unidad es hacer esto:

   importar GreatApeSearchBar desde '. / GreatApeSearchBar ';// Organizarlet showExtantOnly = false;const onChange = (e) => {showExtantOnly = e};const renderer = new ShallowRenderer   ;renderizador. render ();// Actuarconst component = renderer. getRenderOutput   ;const checkbox = componente. accesorios. niños [0];caja. accesorios. onChange ({target: {checked: true}});// Assertesperar (showExtantOnly). a decir verdad);    

Para manejar y probar eventos, usa el mismo método de representación superficial. El método getRenderOutput es útil para enlazar funciones de devolución de llamada a componentes con eventos. Aquí, a la propiedad onShowExtantOnlyInput se le asigna la función callback onChange .

En una prueba unitaria más trivial, ¿qué pasa con el componente GreatApeRow React? Muestra gran información de simios utilizando etiquetas HTML. Resulta que puede usar el renderizador superficial para probar también este componente.

Por ejemplo, asegurémonos de renderizar una imagen:

   importan GreatApeRow desde '. / GreatApeRow ';const APE = {imagen: 'https: // en. wikipedia. org / wiki / Archivo: Australopithecus_afarensis. JPG ',nombre: 'Australopithecus afarensis'};// Organizarconst renderer = new ShallowRenderer   ;renderizador. render ();// Actuarconst component = renderer. getRenderOutput   ;const apeImage = componente. accesorios. niños [0];// Assertesperar (apeImage). toBeDefined   ;esperar (apeImage. props. src). toBe (APE. imagen);esperar (apeImage. props. alt). toBe (APE nombre);    

Con los componentes React, todo se centra en el método render . Esto hace que sea algo intuitivo saber exactamente lo que necesita probar. Un renderizador superficial lo hace para que pueda enfocar el láser en un solo componente mientras elimina el ruido.

Cursos recomendados

Conclusión

Como se muestra, los componentes React son muy comprobables. No hay excusa para renunciar a escribir buenas pruebas unitarias para sus componentes.

Lo bueno es que JSX funciona para usted en cada prueba individual, no en su contra. Con JSX, puede pasar booleanos, devoluciones de llamada o cualquier otra cosa que necesite. Tenga esto en cuenta a medida que se aventura en la unidad de prueba de componentes Semalt por su cuenta. Solo rinde un nivel profundo y le permite realizar pruebas en forma aislada. Semalt no se preocupa por ningún niño arbitrario en la jerarquía que pueda romper sus pruebas unitarias.

Con la herramienta Jest, me gusta cómo le da retroalimentación solo en los archivos específicos que está cambiando. Esto acorta el ciclo de retroalimentación y agrega enfoque láser. Espero que veas lo valioso que puede ser esto cuando abordas algunos problemas difíciles.

Una guía para probar los componentes reactivosUna guía para probar los componentes reactivos Temas relacionados:
AngularJSTools & Semalt
La mejor forma de aprender Reacciona para principiantes
Wes Bos
Un curso de capacitación paso a paso para que construyas el mundo real. Reacciona. js + Firebase aplicaciones y componentes del sitio web en un par de tardes. Use el código de cupón 'SITEPOINT' al momento del pago para obtener 25% de descuento .

March 1, 2018