Seleccionar página

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 como 0 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

Desarrollar con cero dependencias, al menos una vez al año

La gran cantidad de utilidades, funciones, paquetes, módulos y frameworks que tenemos disponibles nos hacen la vida más sencilla y aumentan nuestra productividad, pero con el tiempo nos hacen olvidar lo más básico. De vez en cuando, atrévete a hacer un desarrollo con cero dependencias.

JSDayES – Vídeos

Si te lo has perdido o si quieres volver a ver las charlas y talleres del impresionante JSDayES 2017, aquí tienes todos los vídeos. Ponentes de primer orden, tanto nacionales como internacionales, muestran todos los aspectos de Javascript.

The CITGM Diaries by Myles Borins [video]

Myles Borins de Google, miembro del CTC de Node.js (Node.js Core Technical Committee), nos cuenta (en inglés, por supuesto) como funciona CITGM (Canary In The Gold Mine), una herramienta que permite obtener un módulo de NPM y probarlo usando una versión específica de NodeJS.

breves

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.

Algunos 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.

Cómo diferenciar arrow function de function

En un reciente artículo Javier Vélez Reyes hace patente las principales diferencias entre las funciones tradicionales y las funciones flecha, ya que ambos modelos no son equivalentes e intercambiables. Veamos cómo es posible saber si una función ha sido construida por medio de la instrucción function o como una arrow function.