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

Datos inmutables en Javascript

Datos inmutables en Javascript

En Javascript todo parece mutable, es decir, que se puede cambiar, pero lo cierto es que también nos ofrece varios mecanismos para conseguir que los datos que manejamos, especialmente los objetos, sean inmutables. Te invitamos a descubrir cómo…

Copiar objetos en Javascript

Copiar objetos en Javascript

Copiar objetos no es algo sencillo, incluso se podría decir que en si mismo no es posible, ya que el concepto «copiar» no entra dentro del paradigma de los objetos. No obstante, por medio de instrucciones como Object.assign() hemos aprendido como obtener objetos con las mismas propiedades, pero está técnica no se puede aplicar a todos los tipos de objetos disponibles en Javascript. Vamos a ver cómo podemos copiar cualquier tipo de objeto…

Descubre los Javascript Array Internals

Descubre los Javascript Array Internals

El Array es una de las estructuras más utilizadas en Javascript y no siempre bien comprendida. Hoy os invitamos a analizar el comportamiento interno de este objeto y descubrir cómo Javascript implementa las diferente acciones con los Array y que operaciones internas se realizan en cada caso.

Web Components: pasado, presente y futuro

Web Components: pasado, presente y futuro

Los Web Components aparecieron en el panorama de desarrollo hace ya bastante tiempo. Desde su presentación se les ha prestado mucha atención, pero lo cierto es que no han sido acogidos de forma generalizada, quizás por la difusión de nuevos y potentes frameworks. Nos preguntamos qué ha pasado con este estándar y, sobre todo, que puede pasar de aquí en adelante con el uso práctico de los componentes web.

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.

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.

Obtener todas las propiedades de un objeto

¿Cómo podemos obtener absolutamente todas las propiedades de un objeto? No disponemos de un método nativo para este propósito, pero en unas pocas lineas podemos construir una función para nuestro propósito.