Afortunadamente disponemos de excelentes librerías y paquetes para hacer pruebas en Javascript. Mocha, Jazmine, Jest, Chai, ShouldJS y otras soluciones similares nos ofrecen una funcionalidad completa y robusta para hacer nuestros juegos de pruebas. Animamos a todos los que tengan curiosidad sobre cómo establecer un sistema de pruebas bien estructurada que revisen estas opciones.
No obstante, sin que nos demos cuenta, disponemos en todos los navegadores modernos y en Node de un sistema para hacer pruebas sin necesidad de instalar absolutamente nada. Si no nos importa utilizar un sistema minimalista, sin dependencias y que funciona muy bien, podemos utilizar una poco conocida funcionalidad de console
, que parece ser la navaja multiuso del programador: console.assert()
.
Este método es un assert
similar al que ofrecen librerías o paquetes mucho más completos, pero la gran ventaja es que lo tenemos disponible directamente en nuestro navegador o en Node, sin necesidad de cargar nada más. Lo que console.assert()
hace es evaluar una expresión y si es verdadera la ejecución continuará sin problemas, pero si es falsa, lanzará una excepción.
Sintáxis de console.assert()
Esta instrucción tiene estas opciones:
console.assert(expresión a evaluar, [mensaje], […])
- expresión a evaluar: es cualquier expresión válida en Javascript. Puede ser la llamada a una función, el valor de una variable, la comparación de dos valores, etc. Si esta evaluación devuelve
false
o un valor equivalente como0
o""
, se lanzará un error. - mensaje y parámetros siguientes: opcionalmente, cuando se lanza el error se mostrará el mensaje que se pasa a continuación, pudiendo incluirse varios mensajes que se encadenarán o sentencias de escape y sus valores (de forma similar a como funciona
console.log()
.
Podemos ver a continuanción un par de sencillos ejemplos:
console.assert(true, 'No hace nada'); console.assert(false, 'Ups %s.', 'algo no ha funcionado');
Algunas consideraciones
Hay que tener en cuenta que siempre tenemos que incluir una expresión que se evalue como verdadera. Si es necesario deberemos poner un not (!
) cuando el valor que obtenemos es false
.
Este sistema es limitado, por ejemplo, no se muestra mensajes explicando las pruebas que se van pasando, pero es sencillo incluirlos con console.log
.
No creemos que este sea el mejor sistema para hacer pruebas, simplementenes el medio más sencillo y fácil de utilizar, por lo que nadie tiene excusas para no hacer un juego de pruebas de sus funciones o módulos.
Ejemplo del uso de console.assert()
En nuestra serie de artículos sobre la creación de un módulo universal de comparación de cualquier tipo de dato en Javascript (que hemos denominado esequal.js
) vamos a utilizar console.assert()
como sistema básico para hacer las pruebas.
Por ejemplo, en cuanto hemos desarrollado un módulo para que funcione en los navegadores y Node hemos creado también una prueba muy sencilla para comprobar que está funcionando correctamente:
if (typeof require !== 'undefined' && typeof equal === 'undefined') { var equal = require( './esequal' ); } console.log('Must be a function'); console.assert( typeof equal === 'function' ); console.assert( equal.length === 2 ); console.assert( equal.name === 'equal' ); console.log('--- Ok'); if (typeof process !== 'undefined' && typeof process.exit !== 'undefined') { process.exit( 0 ); }
Primera versión de las pruebas de esqueal.js
en GitHub.
Como se puede observar hemos incluido algunas instrucciones dependiendo si está disponible alguna funcionalidad propia de Node como require()
para cargar el módulo o process.exit()
para terminar la ejecución. De esta forma el juego de prueba se puede ejecutar tanto en el servidor como en el cliente.
Conclusión
Que nadie se equivoque, no estamos defendiendo que se abandonen las librerías y frameworks de pruebas, simplemente exponemos una muy sencilla forma de hacer pruebas que tenemos a nuestra disposición y que funciona. Es limitada, pero no requiere de ningún elemento externo, ya que viene por defecto en la mayoría de los navegadores y en Node. Por ello nos hemos animado a explicar cómo usarla y que quien quiera pueda sacarle todo el partido.
Como hemos comentado, en los próximos artículos donde se avanzará en el desarrollo de un módulo que permita comparar cualquier valor de Javascript vamos a utilizar este mecanismo para hacer las pruebas. Como se podrá ver, nuestra versión final de las pruebas incluye más de ochocientas pruebas con este sistema.
Novedades
HTTP2 para programadores. Enviar mensajes del servidor al cliente con Server Sent Event (sin WebSockets)
En esta charla, organizada por MadridJS, Pablo Almunia nos muestra cómo la mayoría de nosotros cuando oímos hablar por primera vez de HTTP2 nos ilusionamos con las posibilidades que presumiblemente se abrían para el desarrollo de soluciones web avanzadas y cómo muchos nos sentimos defraudados con lo que realmente se podía implementar.
En esta charla podemos ver cómo funciona el HTTP2, que debemos tener en cuenta en el servidor para hace uso de este protocolo y, sobre todo, cómo podemos enviar información desde el servidor al cliente de forma efectiva y fácil. Veremos con detenimiento cómo por medio de los Server-Sent Events (SSE) podemos recibir en el cliente datos enviados desde el servidor sin utilizar websocket, simplificando enormemente la construcción de aplicaciones con comunicación bidireccional.
Observables en Javascript con Proxies
En esta charla, organizada por MadridJS, Pablo Almunia nos habla de la observación reactiva de objetos en Javascript por medio de Proxy. Se describe paso a paso cómo funcionan los Proxies y en que casos pueden ser nuestro mejor aliado. Veremos que no hay que tenerles miedo, son bastante sencillos de utilizar, y nos ofrecen una gran abanico de posibilidades.
Aplicaciones JAMStack, SEO friendly y escalables con NextJS
En esta charla de Madrid JS, Rafael Ventura nos describe las funcionalidades clave de NextJS, nos muestra en vivo cómo desarrollar una completa aplicación JAMStack con Server Side Rendering (SSR) y Static Site Generation (SSG) y termina mostrando como publicar esta aplicación en Vercel.
Stencil JS: mejora el Time To Market de tu producto, por Rubén Aguilera
En esta charla Rubén Aguilera nos cuenta los problemas que tienen muchas empresas a la hora de sacar productos accesibles, vistosos y usables en el Time To Market que requiere Negocio y cómo podemos minimizar este tiempo gracias al DevUI con StencilJS para adecuar una aplicación de Angular a las exigencias del mercado en tiempo record.
breves
Javascript: 25 aniversario
25 años con Javascript han dado para mucho. Pero todavía queda mucho para este lenguaje de programación.
Descrubir algunas características de console
En el día a día nos encontramos muy a menudo utilizando console. Es una navaja multiusos que nos facilita la vida a la hora de depurar nuestro código. La mayoría de nosotros ha utilizado console.log(), pero tiene otras muchas funcionalidades.
Matrices dispersas o sparse arrays en JS
Una característica que puede producir algunos problemas, si no lo tenemos en cuenta, es la posibilidad de tener matrices con huecos, es decir, con algunos de sus elementos sin definir. Es lo que se suele denominar una matriz dispersa o sparse array. Veamos cómo trabajar con esta características de las matrices.
Operadores de bits usados con asiduidad
Cada día más a menudo podemos encontrar operadores binarios utilizados como formas abreviadas de algunas operaciones que de otra forma sería algo menos compactas y, quizás, más comprensibles. Veamos algunos casos en detalle.