Haciendo TDD con QUnit, Parte 2

En el anterior post mostramos como pasar el primer test.

5. Creando segundo test.

La segunda prueba básica de listas es la siguiente:

list.add("fred")
assert_equal("fred", list.find("fred").value())
assert_nil(list.find("wilma"))
que debemos cargar en el archivo KSL.SKListTest.js. El código queda así:
$(document).ready(function(){
	module("Kata Simple List: BasicListTest");
	test( 'At new List, find "fred" return null.', function() {
		var list = new SKList();
		
		equal (list.find("fred"), null);
	} );
	test( 'At a List with node "fred", find "fred" return the node "fred".', function() {
		var list = new SKList();
		
		list.add("fred");
		equal (list.find("fred").value, "fred");
	} );
});
donde las líneas resaltadas representan el nuevo test. Lo que hacemos es verificar que si agregamos un nodo (con texto "fred") y luego lo buscamos, el valor de dicho nodo debería ser "fred". En la consola, podemos ejecutar los test y veremos que el test no pasó:

Esto, como podemos ver en la consola, es porque nuestra clase SKList no posee un método add.

6. Haciendo que el segundo test de verde.

Para que nuestro test pase, debemos realizar una serie de pasos. El primero, agregar nuestro método "add", el cual agregamos sin código, y volvemos a revisar la consola.

Ahora, el error que aparece es que no se puede acceder a la propiedad value del objeto null. Esto es porque el método find devuelve siempre null (que era lo que necesitábamos para pasar el primer test). Modificamos SKList para que implemente un array, el método find para que devuelva lo que corresponde y el método add para que agregue al array interno. El código de find queda así:

function SKList() {
	this._list = new Array();

	return this;
}
SKList.prototype.find = function(value) {
	for (var index = 0; index < this._list.length; index++) {
		var item = this._list[index];
		if (item.value == value) {
			return item;
		}
	}
 
	return null;
}
SKList.prototype.add = function(value) {
	var node = new SKNode();
	node.value = value;
	this._list.push(node);
}
La línea resaltada nos muestra que en la lista, agregamos objetos de tipo SKNode. Como aún no creamos dicha clase, al ejecutar nuestro test, la consola nos muestra lo siguiente:

Esta clase es bastante simple, lo único que debe poseer es la propiedad value. El código lo agregamos al archivo KSL.SKNode.js, y queda así:

function SKNode() {
	var value = '';

	return this;
}
Al ejecutar la consola ahora, vemos que los tests pasaron sin problema, con lo que hasta acá terminamos el segundo test, y el post de TDD con QUnit lo cerramos también acá.

El código fuente de este post se encuentra en GitHub.

Pronto, también estará el de la Kata completa.