Imagen - Kent C. Dodds - TestingJavascript.com
🏃 Rápidos
💵 Baratos
🙂 Simples
🦥 Lento
💸 Caro
🤔 Complejo
Imagen - Kent C. Dodds - TestingJavascript.com
Typescript, linters, formateadores
Partes pequeñas e independientes, funciones, componentes aislados
Módulos que usan esas partes pequeñas.
Validar que funcionen bien entre sí.
Emular cómo el usuario usará la aplicación. Validar flujos
🦥 Lento
💸 Caro
🤔 Complejo
🏃 Rápidos
💵 Baratos
🙂 Simples
Una manera de ver de forma "analítica" la cobertura de nuestros tests sobre la totalidad de nuestros programas
Corre los tests
Da resultados
Lógica de tests
Condiciones
Simula interacciones de usuario en el navegador
Chai
Cypress
Jasmine
Mocha
Puppeteer
Jest
Jest
Test Runner
Lib Aserciones
Headless Browser
Test Runner
Lib Aserciones
Headless Browser
Corre los tests
Da resultados
Lógica de tests
Condiciones
Simula interacciones de usuario en el navegador
Puppeteer
Jest
Jest
Librería de Queries
Selectores
Interacciones
Utilidades
✔️ Jest
✔️ React Testing Library
✔️ User Event
✔️ Script para ejecutar
➕ jest-environment-jsdom-sixteen
➕ jest-runner-groups: 1.1.0,
➕ puppeteer: ^3.0.4,
💡Ambos son aplicables también a los bloques "describe"💡
Respetar estructura de carpetas
Archivo .spec o .test
Jest busca todas las carpetas con estructura __tests__ por default
Puedo configurar otra sintaxis de ser requerido
Puedo configurar formatos de archivo de ser requerido
Los tests se deberían acercar lo más posible a cómo van a interactuar lxs usuarixs con el sitio
Si no puedo seleccionar algún elemento con alguno de éstos queries, básicamente mi aplicación no es accesible por lo que debería realizar alguna modificación.
Como último recurso están los test IDs pero son elementos no-interactivos ni captados por screen readers o herramientas de accesibilidad, es la última opción.
💡https://testing-library.com/docs/guide-which-query💡
Sirve para comparar cambios en el renderizado de un componente contra un "registro" de cómo se debería ver
Renderiza el componente virtualmente y guarda una copia de texto.
Al ejecutar un nuevo test hace un diff entre ambos y si hay algún cambio marca el error.
Es importante no depender únicamente de éste tipo de tests. Es una herramienta más. (Pero es mejor que nada)
🖱️🖱️ La utilidad de la Testing Library, userEvent nos permite simular eventos de manera mucho más cercana a cómo el usuario 🖱️🖱️
Nos permite elegir inputs:
💡 Es un replanteo de la opción "nativa" de TL que es fireEvent. UserEvent simula de manera mucho más acertada las acciones 💡
Rerender nos permite actualizar props de un componente desestructurando la función al renderizar
💡 RTL nos brinda utilidades para el testeo asincrónico que son porteos directos @testing-library/dom 💡
Act nos permite simular como react registra cambios en componente y esperar a que se hayan hecho las modificaciones de estado asincrónicas antes de continuar
No está limitado a re-renderizado de componentes, también se usa para realizar eventos y acciones que disparen un cambio asincrónico en el componente
💡 RTL nos brinda utilidades para el testeo asincrónico que son porteos directos @testing-library/dom 💡
Jest nos permite mockear liberías y funciones internas (por ej "fs" de node) y externas ("react-redux", "react-router-dom")para agilizar los tests y que sean más robustos.💪
Nos permite tener control de la entrada y salida de data haciendo que un componente no dependa de algo externo para poder ser testeado.
Todo es contenido asincrónico de pedidos ida-vuelta entre puppeteer y la instancia de chromium manejado con async/await
Puppeteer tiene su propia API con selectores basados en querySelector del navegador
💡Hay una extensión de la Testing Library para puppeteer: pptr-testing-library💡
beforeAll, afterAll, beforeEach y afterEach
Jest cuenta con utilidades globales que nos permiten ejecutar código repetitivo en nuestras Test Suites
💡Éstas utilidades tienen scope de bloque, por lo que importa el posicionamiento de las mismas dentro/fuera de los bloques describe💡