El tutorial Jobeet

8.5. Probando el método slugify

Vamos a comenzar a adentrarnos en el mundo de las pruebas unitarias escribiendo pruebas para el método Jobeet::slugify().

El método slugify() lo creamos en el tutorial del día 5 para limpiar una cadena de texto de forma que su contenido se pueda incluir como parte de una URL. La transformación que se realiza es bastante sencilla, ya que consiste en convertir todos los caracteres que no sean ASCII en un guión medio (-) y pasar la cadena de texto a minúsculas:

Cadena original Cadena transformada
Sensio Labs sensio-labs
Paris, France paris-france

Para probar el método slugify, reemplaza el contenido de la prueba unitaria por el siguiente código:

// test/unit/JobeetTest.php
require_once dirname(__FILE__).'/../bootstrap/unit.php';

$t = new lime_test(6, new lime_output_color());

$t->is(Jobeet::slugify('Sensio'), 'sensio');
$t->is(Jobeet::slugify('sensio labs'), 'sensio-labs');
$t->is(Jobeet::slugify('sensio   labs'), 'sensio-labs');
$t->is(Jobeet::slugify('paris,france'), 'paris-france');
$t->is(Jobeet::slugify('  sensio'), 'sensio');
$t->is(Jobeet::slugify('sensio  '), 'sensio');

Si te fijas en las pruebas que acabamos de escribir, verás que cada línea sólo prueba una cosa. Este es uno de los conceptos fundamentales que siempre tienes que tener presente. Prueba una sola cosa cada vez.

Ahora ya puedes volver a ejecutar las pruebas. Si todas las pruebas pasan correctamente, que es lo que esperamos en este ejemplo, verás una barra de color verde. Por el contrario, si alguna prueba falla verás una barra de color rojo indicando que algunas pruebas han fallado y que tienes que arreglarlas (recuerda que los colores no se ven en sistemas operativos tipo Windows).

Pruebas del método slugify

Figura 8.2 Pruebas del método slugify

Si una prueba falla, se muestran mensajes de ayuda con información sobre el motivo por el que ha fallado. Sin embargo, si tienes cientos de pruebas en un archivo, es bastante complicado identificar la característica exacta que ha fallado.

Por ese motivo, todas los métodos de pruebas de lime admiten como último argumento una cadena de texto que se utiliza como descripción de la prueba. Incluir este argumento es muy útil porque te obliga a describir exactamente lo que estás probando. Además, esta descripción puede servir como documentación del comportamiento esperado por el método. Por lo tanto, vamos a añadir algunos mensajes en las pruebas del método slugify:

require_once dirname(__FILE__).'/../bootstrap/unit.php';

$t = new lime_test(6, new lime_output_color());

$t->comment('::slugify()');
$t->is(Jobeet::slugify('Sensio'), 'sensio', '::slugify() converts all characters to lower case');
$t->is(Jobeet::slugify('sensio labs'), 'sensio-labs', '::slugify() replaces a white space by a -');
$t->is(Jobeet::slugify('sensio   labs'), 'sensio-labs', '::slugify() replaces several white spaces by a single -');
$t->is(Jobeet::slugify('  sensio'), 'sensio', '::slugify() removes - at the beginning of a string');
$t->is(Jobeet::slugify('sensio  '), 'sensio', '::slugify() removes - at the end of a string');
$t->is(Jobeet::slugify('paris,france'), 'paris-france', '::slugify() replaces non-ASCII characters by a -');
Pruebas del método slugify con mensajes descriptivos

Figura 8.3 Pruebas del método slugify con mensajes descriptivos

La descripción de cada prueba también es muy útil cuando intentas descubrir qué tienes que probar. Como habrás observado, las descripciones de las pruebas siempre siguen el mismo patrón: son frases que describen cómo se debe comportar el método y siempre empiezan con el nombre del método que se prueba.