En el mundo actual las tecnologÃas con las que vivimos necesitan código, esto ha hecho que el desarrollo de software se haya vuelto industrial, donde contamos con procesos y herramientas, como el testing, que nos permiten entregar mas rápido proyectos de calidad a nuestros clientes reduciendo el riesgo de errores en producción.
Resolver un bug en desarrollo es mucho más barato que resolverlo en producción.
Normalmente hay cuatro fases en el desarrollo de software para crear un producto:
Diseño ⇒ Desarrollo ⇒ Pruebas ⇒ Producción
En estas fases, detectar un error se vuelve cada vez mas costoso. Ahi es donde hacemos técnicas para prevenir estas situaciones. El testing es la manera en la que nosotros gestionamos el riesgo y tratamos de evitar, en la medida de lo posible, los errores en el sistema.
- Análisis de código estático: Mientras desarrollamos vamos viendo nuestros resultados gracias al uso de herramientas como: Eslint, Prettier, Spell Checker, y TypeScript.
- Pruebas unitarias: Nos aseguramos que el código funciona como queremos.
- Pruebas de integración: Verificar que varios elementos funcionan bien trabajando juntos.
- Revision de código: Equipo o persona encargada de revisar el código de las demás personas.
- QA: Equipos de creación de pruebas automáticas o manuales.
Esta pirámide incluye todas las capas de testing que se pueden implementar dentro de un proyecto, comenzando en la base con las pruebas más repetidas) y terminando en la cima con las pruebas menos repetidas (y más costosas).
Aclarar que existe un antipatrón, en el cual se invierte la figura formando un cono.
Por otro lado también tenemos el trofeo del testing que implementa de una forma diferente a la pirámide del testing, donde se implementan las pruebas estáticas del código (las cuales son las más repetidas y rápidas), luego las pruebas unitarias (las cuales son las más rápidas y menos repetidas) y por último las pruebas de integración (dando mayor importancia a estas) y finalmente las pruebas End to End o E2E (las cuales son las menos repetidas y más costosas).
En JavaScript existen una gran variedad de herramientas para hacer testing, pero a pesar de la gran variedad la mayorÃa de ellas siguen un patrón y sintaxis similar.
En la página de State Of Js podemos encontrar información sobre las herramientas más populares en el mundo JavaScript para dicha tarea.
Estas herramientas se pueden utilizar tanto en el lado del cliente como en el lado del servidor.
- Jest
- Chai
- Mocha
- Ava
- Jasmine
- Playwright
- Cypress
- WebdriverIO
- Puppeteer
- Storybook
- SuperTest
- Dredd
- Postman
- Eslint
- Prettier
- Spell Checker
- TypeScript
- Requerimientos
- Diseño y arquitectura
- Desarrollo
- QA
- Producción
- SUT: Requerimientos
- Ejecución: Manuales
- Objetivos: Validar
- Herramientas: Inspección
- SUT: Sistemas
- Ejecución: Manuales / Automática
- Objetivos: Verificar
- Herramientas: Case Tools
- SUT: Depende
- Ejecución: Automática
- Objetivos: Verificar
Se pueden dividir en dos tipos: Funcionales y no funcionales.
- Pruebas estáticas
- Unit test
- Pruebas de integración
- End to End (E2E)
- Rendimiento
- Carga o estabilidad
- Prueba de estrés
- Usabilidad
- Seguridad
El coverage report es un reporte que nos muestra el porcentaje de código que esta cubierto por las pruebas unitarias.
En jest podemos generar este reporte con el siguiente comando:
jest --coverageEn instituciones como Federal Aviation Administration e ISO se exige que el código tenga un coverage report de 100%. En otras compañÃas como Google, Facebook o AirBnb con que el coverage report sea de 80% o superior ya es suficiente.
100% coverage report no significa que el código este libre de errores.

