El mundo de JavaScript ofrece un montón de opciones para … bueno, casi todo. Hoy nos centraremos en las herramientas de pruebas, respondiendo a la pregunta «¿Cuál es el mejor framework de JavaScript?»
Te guiaremos a través de cinco de los frameworks de pruebas de JavaScript más populares y, al final del artículo, elegiremos el que creemos que es el mejor. Comencemos.
- ¿Qué son los frameworks de pruebas?
- Cinco frameworks de pruebas de JavaScript que vale la pena revisar
- Mocha
- Puppeteer
- Jasmine
- QUnit
- Jest
- Ausencias notables
- Verdict: ¿Cuál es el mejor framework de pruebas para JavaScript?
- Evaluación de los Frameworks
- Coste
- Instalación
- Facilidad de configuración
- Curva de aprendizaje
- Aquí está el ganador
¿Qué son los frameworks de pruebas?
Antes de sumergirnos en nuestra lista de frameworks, es importante entender qué es un framework de pruebas.
Por decirlo de forma sencilla, un framework de pruebas es una herramienta -o conjunto de herramientas- que te ayuda a realizar pruebas unitarias. Un marco de pruebas debe proporcionarle al menos
- Reglas o convenciones para escribir casos de prueba y organizarlos en suites de pruebas.
- Medios para ejecutar y autocalificar automáticamente las pruebas.
- Resultados de las pruebas que se muestran y se formatean.
Cinco frameworks de pruebas de JavaScript que vale la pena revisar
A estas alturas deberías tener un conocimiento firme de lo que son los frameworks de pruebas y por qué los necesitamos. Con eso fuera de nuestro camino, es hora de abordar nuestra lista de herramientas, comenzando con Mocha.
Mocha
Mocha, a veces también llamado MochaJS, es un marco de pruebas que se ejecuta tanto en Node.js como en el navegador. Fue lanzado allá por 2011 y desde entonces ha sido uno de los frameworks de pruebas más populares para el mundo de JavaScript. Sin embargo, según el informe State of JavaScript, la popularidad de Mocha ha ido en descenso en los últimos años, aunque sigue siendo posiblemente la más utilizada y conocida de las herramientas.
Este framework hace que las pruebas asíncronas sean sencillas al ejecutar las pruebas en serie. Eso permite la elaboración de informes precisos y, al mismo tiempo, la asignación de las excepciones no capturadas a los casos de prueba correctos. El framework Mocha tiene una configuración extremadamente flexible. Te permite emparejarlo con las librerías que necesitas particularmente para funcionalidades como aserciones, mocking, etc.
La desventaja de tal flexibilidad es que Mocha requiere más trabajo para su configuración inicial. Además, mientras que otros frameworks ya vienen con funcionalidades de assertions y mocking, Mocha requiere herramientas adicionales para ello.
Sitio oficial: mochajs.org
Repositorio: github.com/mochajs/mocha
Puppeteer
Puppeteer es una librería Node.js que permite a los usuarios controlar un navegador Chrome o Chromium sin cabeza. De esta manera es posible automatizar pruebas que normalmente se realizarían manualmente usando un navegador normal. La página del proyecto enumera algunos ejemplos de pruebas que puedes realizar:
- Generar capturas de pantalla y PDFs de páginas.
- Rastrear una SPA (aplicación de una sola página) y generar contenido pre-renderizado (es decir, «SSR» ).
- Automatizar el envío de formularios, pruebas de UI, entrada de teclado, etc.
- Crear un entorno de pruebas actualizado y automatizado. Ejecute sus pruebas directamente en la última versión de Chrome utilizando las últimas características de JavaScript y del navegador.
- Capture un rastro de línea de tiempo de su sitio para ayudar a diagnosticar problemas de rendimiento.
- Pruebe las extensiones de Chrome.
- Testim lanzó una grabadora gratuita para Puppeteer. Compruébalo y úsalo tantas veces como quieras.
Sitio oficial: developers.google.com/web/tools/puppeteer
Repositorio: github.com/puppeteer/puppeteer
Jasmine
Jasmine es un framework de pruebas BDD (behavior-driven development) de JavaScript.
Este framework ya viene con casi todo lo que necesitas para empezar a hacer pruebas. Tiene aserciones incorporadas y dobles de prueba con espías, a diferencia de, por ejemplo, Mocha, que requiere que instales herramientas de terceros para esas funcionalidades.
Sin embargo, Jasmine también es flexible y puede integrarse perfectamente con un gran número de herramientas de prueba adicionales. Puedes utilizar fácilmente Karma como corredor de pruebas o emplear Sinon.JS para tus necesidades de mocking.
Sitio oficial: jasmine.github.io/
Repositorio: github.com/jasmine/jasmine
QUnit
QUnit fue originalmente parte de la biblioteca de programación jQuery. John Resig la creó para probar jQuery, jQuery UI y jQuery Mobile. En 2008, QUnit fue extraído de la base de código de jQuery y lanzado como un marco independiente, pero todavía requiere jQuery para funcionar. En 2009, arreglaron eso con una reescritura, haciendo que QUnit finalmente fuera independiente de jQuery.
A pesar de que originalmente se dirigía a jQuery, QUnit es actualmente un marco genérico que puede probar cualquier código JavaScript, soportando tanto entornos del lado del cliente como del lado del servidor.
Podrías pensar en QUnit como el representante de JavaScript en la familia xUnit de marcos de pruebas unitarias. Tiene una configuración rápida y sencilla. Además, dado que ha existido durante al menos 12 años, es una herramienta bien soportada.
Sitio oficial: qunitjs.com
Repositorio: github.com/qunitjs/qunit
Jest
Jest es un marco de pruebas para JavaScript que se centra en la simplicidad. Lanzado por Facebook, Jest tiene como objetivo trabajar fuera de la caja y sin necesidad de configuración.
Si echas un vistazo a la página de «inicio» de Jest, verás que puedes instalarlo, escribir tu primera prueba y ejecutarla en cuestión de pocos minutos, sin configuraciones complicadas ni instalaciones adicionales. Otra ventaja de Jest es su impresionante rendimiento.
Jest se utiliza principalmente para probar aplicaciones React, pero eso no significa que estés restringido a utilizarlo para probar sólo aplicaciones escritas con el framework. Al contrario: puedes usarlo para probar aplicaciones Node, Angular y Vue también, por nombrar algunas.
Sitio oficial: jestjs.io/
Repositorio: github.com/facebook/jest
Ausencias notables
Tal vez te preguntes por qué algunas famosas herramientas de prueba de JavaScript no llegaron a nuestra lista. Tal vez sientas que herramientas como Karma, Sinon y Chai, entre otras, son lo suficientemente populares como para estar en la lista. ¿Por qué no las incluimos?
En pocas palabras, queríamos mantener la lista lo más concisa posible. Para ello, hemos decidido no incluir en la lista herramientas de prueba que no sean frameworks, estrictamente hablando. Por lo tanto, esa es la razón por la que una herramienta súper popular como Karma no lo hizo: es un corredor de pruebas, no un marco. El mismo razonamiento se aplica a Sinon (una herramienta de mocking) y Chai (una librería de aserciones).
Podrías argumentar que Puppeteer no encaja del todo en la lista y, hasta cierto punto, estaría de acuerdo. Es decir, todas las demás herramientas son frameworks más adecuados para realizar pruebas de tipo unitarias, mientras que Puppeteer es más bien una herramienta de automatización del navegador. Sigue siendo un marco de pruebas, sin embargo, en el sentido de que le permite diseñar pruebas automatizadas que luego se ejecutan sin intervención humana.
Verdict: ¿Cuál es el mejor framework de pruebas para JavaScript?
Hemos presentado cinco frameworks de pruebas para JavaScript. Ahora es el momento de cumplir con la promesa del título del post y seleccionar el mejor. Para ello, vamos a juzgar los frameworks según cuatro criterios: coste, instalación, facilidad de configuración y curva de aprendizaje.
Evaluación de los Frameworks
Coste
El primer criterio es sin duda el más fácil de evaluar para nosotros. Todos los frameworks que hemos cubierto aquí son proyectos de código abierto, por lo que se pueden descargar y utilizar de forma gratuita (como la cerveza). Así que no tenemos un claro ganador aquí. Sigamos adelante.
Instalación
Instalar todas las herramientas anteriores es bastante fácil. Después de todo, puedes instalarlas todas usando npm (o, alternativamente, Yarn.) Sin embargo, algunas de las herramientas ofrecen opciones de instalación adicionales.
Por ejemplo, además de npm y Yarn, puedes instalar QUnit como una descarga independiente. Pero eso requeriría que almacenaras y gestionaras este activo. En su lugar, puedes utilizar la versión alojada en el CDN de jQuery. Jasmine también ofrece una versión independiente que no depende de Node y te permite ejecutar las especificaciones usando tu navegador.
Entonces, ¿tenemos un ganador aquí? Creemos que sí. Si tuviéramos que elegir basándonos sólo en la facilidad de instalación, tendríamos otro empate. Pero, como hemos visto, tanto QUnit como Jasmine ofrecen más opciones, ya que puedes usarlas como librerías independientes. ¿Es útil esta flexibilidad adicional? Su kilometraje puede variar en esto, pero para nosotros, QUnit y Jasmine son los ganadores aquí.
Ganadores: QUnit y Jasmine
Facilidad de configuración
Ahora, vamos a ver la facilidad de configuración. Cuando se trata de la configuración inicial, tenemos un claro ganador aquí: Jest. El marco promete el uso de cero-configuración y cumple con esa promesa. Claro, le permite hacer configuraciones opcionales, pero se siente increíble para instalar un marco de pruebas y tener una prueba real que se ejecuta en unos dos minutos, sin ninguna configuración o instalación de herramientas adicionales.
Ganador: Jest
Curva de aprendizaje
Por último, la curva de aprendizaje. Aquí tendremos que elegir de nuevo a Jest. Como viene con una amplia API y no requiere tantas herramientas de terceros como los otros frameworks, Jest presenta inevitablemente una curva de aprendizaje menos pronunciada.
Ganador: Jest
Aquí está el ganador
Después de cubrir cinco frameworks de pruebas de JavaScript, y luego analizarlos utilizando cuatro criterios, es el momento de elegir un ganador.
Así que, ya que fue el ganador en dos de los cuatro criterios que utilizamos, vamos a elegir Jest como nuestro ganador. Eso no significa que no debas probar las otras herramientas. Al contrario: experimenta y practica todo lo que puedas ya que es la mejor manera de aprender.