CIUnit: Errores y soluciones para empezar a funcionar

Poco a poco me voy concienciando de la importancia de realizar tests unitarios, pero entre unas cosas y otras, y siempre un poco de perrería, nunca me había dignado a montar tests unitarios con mis aplicaciones en CodeIgniter.

Por fin ayer, aprovechando un rediseño de la estructura de la aplicación, me decidí a incluir tests unitarios en CodeIgniter. Tras buscar un poco encontré una implementación para integrar PHPUnit con CodeIgniter, llamada CIUnit.

La documentación es un tanto escasa y confusa, pero tres buenos sitios donde buscar son:

Tras seguir los pasos de la instalación (en un Mac OS X Mountaion Lion), y lanzar PHPUnit desde consola, me saltaron varios errores que detallo a continuación:

Error

[CIUnit] PHP Error: Warning - require_once(PHPUnit/Autoload.php): failed to open stream: No such file or directory File Path: CIUnit/bootstrap_phpunit.php (line: 259)

Fatal error: require_once(): Failed opening required 'PHPUnit/Autoload.php' (include_path='.:') in /project_path/application/third_party/CIUnit/bootstrap_phpunit.php on line 259

Solución

Si estás usando la última versión de PHPUnit tengo entendido que no es necesario cargar ninguna librería, por lo que podemos ir al fichero bootstrap_phpunit.php y comentar o borrar la línea 259.

Error

[CIUnit] PHP Error: Notice - Undefined index: REMOTE_ADDR File Path: core/Input.php (line: 351)
PHPUnit 4.0.14 by Sebastian Bergmann.

Solución

Cuando lanzamos una aplicación PHP desde consola (en este caso PHPUnit) evidentemente no tendremos una REMOTE_ADDR, por lo que debemos añadir una comprobación.

Sustituimos:

$this->ip_address = $_SERVER['REMOTE_ADDR'];

Por lo siguiente:

if(isset($_SERVER['REMOTE_ADDR']))
    $this->ip_address = $_SERVER['REMOTE_ADDR'];
else
    $this->ip_address = '127.0.0.1';

Error

[CIUnit] Error: 500 Message: Unable to connect to your database server using the provided settings. Filename: core/Loader.php Line Number: 346

Solución

Tal como explican en esta página, no podemos usar localhost como hostname, por lo que lo cambiamos por 127.0.0.1 en application/config/testing/database.php:

$db['default']['hostname'] = '127.0.0.1';