1. Code
  2. JavaScript

Pruebas de JavaScript rápidas y sencillas con "Assert"

Hace años, aprendí una función engañosamente simple de "afirmar" de John Resig, para probar tu JavaScript.  Sorprendentemente, con apenas cinco o seis líneas, este código proporciona un gran nivel de poder y control sobre tu código durante la prueba. Te mostraré cómo usarlo en el video de sugerencia rápida de hoy.
Scroll to top

Spanish (Español) translation by Valentino (you can also view the original English article)

Hace años, aprendí una función engañosamente simple de "afirmar" de John Resig, para probar tu JavaScript.  Sorprendentemente, con apenas cinco o seis líneas, este código proporciona un gran nivel de poder y control sobre tu código durante la prueba. Te mostraré cómo usarlo en el video de sugerencia rápida de hoy.


Transmisión de pantalla completa

Please accept preferences cookies to load this content.

Código de "afirmación"

1
 
2
<!DOCTYPE HTML> 
3
<html lang="en-US"> 
4
<head> 
5
	<meta charset="UTF-8"> 
6
	<title>Easy JavaScript Testing </title> 
7
	<style> 
8
		.pass:before { 
9
			content: 'PASS: '; 
10
			color:  blue; 
11
			font-weight: bold; 
12
		} 
13
 
14
		.fail:before { 
15
			content: 'FAIL: '; 
16
			color: red; 
17
			font-weight: bold; 
18
 
19
		} 
20
	</style> 
21
</head> 
22
<body> 
23
 
24
<ul id="output"></ul> 
25
 
26
<script> 
27
var output = document.getElementById('output'); 
28
 
29
function assert( outcome, description ) { 
30
	var li = document.createElement('li'); 
31
	li.className = outcome ? 'pass' : 'fail'; 
32
	li.appendChild( document.createTextNode( description ) ); 
33
 
34
	output.appendChild(li); 
35
}; 
36
</script>

¡Eso es todo lo que necesitas para la mayoría de las pruebas básicas! La función de aserción acepta dos parámetros:

  1. resultado: un valor booleano, que hace referencia a si la prueba pasó o no
  2. descripción: una breve descripción de tu prueba.

Luego, la función de aserción simplemente crea un elemento de lista, aplica una clase de "aprobado" o "suspenso", dependiendo de si tu prueba arrojó verdadero o falso, y luego agrega la descripción al elemento de la lista.  Finalmente, ese bloque de codificado se agrega a la página. Es increíblemente simple, pero funciona a la perfección.


Prueba 1: tu primer ejemplo

1
 
2
function add(num1, num2) { 
3
	return num1 + num2; 
4
} 
5
 
6
var result = add(5, 20); 
7
assert( result == 24, 'Checking the add function'); 
8
 
9
// OR 
10
assert( add( 5, 20 ) == 24, 'Checking the add function');

Prueba 2: Cierres

1
 
2
var someArray = [1,2,3,4,5], 
3
	len = someArray.length, 
4
	i = 0; 
5
 
6
var count = 0; 
7
 
8
for ( ; i < len; i++ ) { 
9
	setTimeout(function() { 
10
		assert( count++ === i, 'Checking the value of: ' + i ); 
11
	}, i * 300); 
12
}
¡UH oh! ¿Qué sucedió?

Este es un problema común, y la respuesta es implementar un cierre, para que podamos recordar el valor de "i". De lo contrario, como notamos anteriormente, el código solo representará el valor final en la secuencia: 5.

1
 
2
var someArray = [1,2,3,4,5], 
3
	len = someArray.length, 
4
	i = 0; 
5
 
6
var count = 0; 
7
 
8
for ( ; i < len; i++ ) (function(i) { 
9
	setTimeout(function() { 
10
		assert( count++ === i, 'Checking the value of: ' + i ); 
11
	}, i * 300); 
12
})(i);

Conclusión

Al principio, puede parecer que solo las bibliotecas de JavaScript enormes requieren algún tipo de prueba; sin embargo, eso está lejos de la verdad.  Como hemos demostrado, incluso una función simple, como "assert" de Resig, ¡puede potencialmente salvarnos de horas de depuración! Entonces, ¿qué usas personalmente para probar tu código?