Wednesday, July 17, 2013

Evitar recargar Fixtures entre Tests en CakePHP

¿Se puede evitar la recarga de fixtures entre tests en CakePHP?

Respuesta corta: No, y de hecho es el mejor comportamiento que puede tener

Respuesta larga: Valora si quieres hacer esto, si sigues con esa intención sigue leyendo...




CakePHP tiene muy bien integrado el tema de tests con PHPUnit, tras meses trabajando con la versión 2 no puedo estar más contento con todos los cambios integrados desde la version 1.3 para facilitar la testabilidad de las aplicaciones, no va a ser fácil cambiarme cuando saquen CakePHP3, cosa que creo que pasará más pronto que tarde.

Uno de los apartados que tienen montado es que es muy fácil generara través de consola fixtures a través de datos de la tabla de datos de producción/desarrollo. Que éstos se recarguen cada vez que empieza un nuevo test nos asegura la unicidad.

En mi caso me he encontrado ante unos tests de integración que tenían que cargar prácticamente el gordo de la base de datos, esto hacía que la repetibilidad de los test se hiciera muy pesada, llegando a los 30-40 segundos. Tras un par de días decidí que no podía seguir avanzando de esa manera porque cada vez tenía menos ganas de lanzar los tests.

Tras hacer algo de búsqueda no encontré ninguna manera concreta para evitar la recarga de fixtures. ¿La solución tomada? Una de las características de los tests es que eran sólo de consulta, no realizaban ninguna acción de inserción/edición/borrado. Debido a esta característica me he podido permitir cargar un sql al inicio de la Suite para a continuación lanzar los tests. He conseguido reducir el tiempo a 3-5 segundos.

Referencia: How to prevent Fixtures from being reloaded between tests with CakePHP and PHPUnit

No comments:

Post a Comment