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:
- El repositorio de CIUnit en Bitbucket
- La página original de CIUnit
- El hilo de soporte en el foro de CodeIgniter
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';