Fri Jan 15 2021 07:49:00 GMT+0000
Este segundo post, es la continuación de un total de tres sobre mis experiencia durante el estudio de la libreía React Testing. En la primera parte empecé con una pequeña descripción y sus ventajas, en esta segunda parte vamos a ver un poco más sobre ella ya que nos centraremos en las queries o consultas, las cuales nos van ayudar para la realización de los test.
Variantes que devuelven el primer elemento
getBy : Retorna el primer nodo que coincide para una consulta, la cual arroja un error si no encuentra un elemento coincidente o si se encuentra más de uno.
querryBy : Retorna el primer nodo que coincide con la consulta y nos devuelve un null si no encuentra coincidencias. Como nos comenta la documentacion, este tipo de consultas es muy útil si queremos verificar que un elemento está presente o no.
findBy : Retorna una promesa, la cual se resuelve cuando se encuentra un elemento coincidente con la consulta realizada, si no encuentro ninguna coincidencia o nos encuentra más de una después de que pasen los 1000 ms que tiene predeterminados, nos rechaza dicha promesa.
Variantes que devuelven un array de elementos
getAllBy : Retorna un array con todos los nodos coincidentes, nos devolvería un error si no encuentra elementos para dicha consulta.
querryAllBy : Retorna un array con todos los nodos coincidentes para la consulta y una array vacío si no encuntra coincidencias.
findAllBy : Retorna una promesa, la cual se resuelve en un array cuando se encuentra los nodos coincidente con la consulta realizada, si no encuentro ninguna coincidencia después de que pasen los 1000 ms que tiene predeterminados, nos rechaza dicha promesa.
Los argumentos de una consulta pueden ser string, expresion regular o funciones, además podemos encontrar opciones para ajustar como el nodo es analizado, la cuales son :
Precision:
Algunas Apis acepta un objeto como final del argumento que se le pasa en la consulta y que puede afectar la precisión de la coincidencias de las string pasada:
exact : Por defecto viene en true, coincide con cadenas completas y distingue entre mayúsculas y minúsculas. Cuando es inicializado a false coincide con subcadenas y no distingue entre mayúsculas y minúsculas.
En la documentación aconsejan que usar expresiones regulares porque te dan más control sobre la coincidencia aproximada.
normalizer : Con esta opción lo que hacemos es anular el comportamiento de Normalization, la cual se ejecuta siempre antes de la lógica para la búsqueda.
Normalización:
Como comentamos en una de la opciones de la precisión, esta se ejecuta antes de la lógica y por defecto quita los espacios en blanco antes y después del texto y regulariza los espacios entre palabras a uno sólo.
Si queremo evitar esta normalización o poner opciones alternativas, les podemos pasar una normalizer function, la cual recibirá una string y espera una versión normalizada de dicha string.
Tenemos el método getDefaultNormalizer, el cual nos permite introducirlo en nuestra opciones y pasarle como parámetro:
Screen
Todas las consultas que exportamos mediante el DOM Testing Library aceptan un contenedor como primer argumento y es común consultar todo el document.body, por eso la librería DOM Testing Library también nos exporta un objeto screen el cual contiene todas las consultas que están vinculadas previamente usando la funcionalidad within, que podemos encontrar en el apartado Custom Queries.
Screen.debug
Método que nos ayuda hacer debug del documento en un sólo elemento o en un array de elementos.
Queries
Estas consultas, son consultas base y requieren de le pasemos un contenedor como primer argumento.
ByLabelText
Nos buscará la etiqueta que coincida con el TextMatch que le pasemos y luego nos encontrará el elemento asociado con dicha etiqueta.
1 | getByLabelText( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from "react"; |
ByPlaceholderText
Nos buscará en todos los elementos que contentagan placeholder hasta econtrar uno que coincida con el TextMatch que le pasemos.
1 | getByPlaceholderText( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from "react"; |
~ Buscar por placeholder no es la mejor opción, por lo general se usa getByLabelText ~
ByText
Nos buscará en todos lo elementos que contengan texto en el nodo con textContent que coincida con el TextMatch que le pasemos. Además funciona con inputs cuyo atributos sean del tipo submit o button.
Podemos pasarle como opción ignore en estado false si queremos evitar que nos devuelva como true una etiqueta script.
1 | getByText( |
Componente
1 | import * as React from 'react'; |
Test
1 | import * as React from 'react'; |
ByAltText
Esta búsqueda es solamente soportada por elementos que contengan el atributo alt,como por ejemplo<img>, <input> y <area>
ya que nos devolvería dichos elementos si su atributo alt coincide con el TextMatch indicado.
1 | getByAltText( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from 'react'; |
ByTitle
Esta búsqueda nos devolvería el elemento que contenga en su atributo title el TextMatch que le pasemos, funcionaría con elementos svg ya que contengan dentro la etiqueta title.
1 | getByTitle( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from 'react'; |
ByDisplayValue
Esta búsqueda nos devolvería el input, textarea o select que contengan el valor indicado en el TextMatch.
1 | getByDisplayValue( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from 'react'; |
ByRole
Búsqueda por el atributo role incluyendo también en los elementos que ya tienen dicha etiqueta implícita (tabla de elementos HTML con roles predeterminados), hay que tener en cuenta que introducir un atributo role en un elemento que ya lo tiene por defecto, nos puede causar problemas, ya que podríamos introducir un role que no le corresponde.
Si tenemos varios elementos con el mismo role podríamos buscarlo por su nombre accesible nombre accesible, dicha busqueda no sustituye a ByAlt o ByTitle.
Tenemos varias opciones que podemos configurar para la búsqueda, como hidden, selected, checked, pressed, queryFallbacks y levels (podrás ver algo más sobre la configuración en la parte ByRole que encuentras en la documentación).
1 | getByRole( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from "react"; |
ByTestId
Solamente es recomendable cuando ninguna de las queries anteriores nos permite hacer la búsqueda.
1 | getByTestId( |
Componente
1 | import * as React from "react"; |
Test
1 | import * as React from 'react'; |
En este post he querido ver las queries que nos brinda esta librería, para terminar mi aprendizaje de React Testing veremos en el siguiente los Firing Events y algunos de los métodos que hereda de DOM Testing Library .
Nos vemos en el próximo post,……