Más con Symfony

3.5. Crea pruebas más rápido

3.5.1. Graba tus pruebas funcionales

Las pruebas funcionales simulan las interacciones que realizan los usuarios para poder probar la integración de todas las partes que forman tu aplicación. Escribir las pruebas funcionales es bastante sencillo pero requiere mucho tiempo. Sin embargo, como cada prueba funcional consiste en un escenario que simula la navegación realizada por un usuario y como navegar por el sitio web es mucho más rápido que escribir código PHP, sería genial poder grabar una sesión de navegación y que se convierta automáticamente en código PHP.

Afortunadamente Symfony dispone de un plugin llamado swFunctionalTestGenerationPlugin y que permite generar en pocos minutos esqueletos de pruebas listos para ser personalizados. Obviamente para hacer estas pruebas completamente funcionales es necesario añadir las llamadas apropiadas a los testers, pero en cualquier caso proporciona un gran ahorro de tiempo.

Este plugin funciona registrando un filtro de Symfony que intercepta todas las peticiones y las convierte en el código de la prueba funcional. Tras realizar la instalación del plugin, es necesario habilitarlo. Abre el archivo filters.yml de la aplicación y añade las siguientes líneas después de la línea de comentario:

functional_test:
  class: swFilterFunctionalTest

Después, activa el plugin en la clase ProjectConfiguration:

// config/ProjectConfiguration.class.php
class ProjectConfiguration extends sfProjectConfiguration
{
  public function setup()
  {
    // ...

    $this->enablePlugin('swFunctionalTestGenerationPlugin');
  }
}

Como el plugin utiliza la barra de depuración web como su interfaz principal, asegúrate de que esté activada (que es lo habitual en el entorno de desarrollo). Cuando se activa el plugin, la barra de depuración web muestra un nuevo elemento de menú llamado "Functional Test". Con este nuevo panel se puede empezar a grabar una sesión pinchando el enlace "Activate" y se puede resetear la sesión actual pinchando sobre el enlace "Reset". Cuando hayas terminado de navegar, copia y pega el código del textarea en un archivo de pruebas y modificalo a tu gusto.

3.5.2. Ejecuta el conjunto de pruebas más rápido

Si dispones de una gran cantidad de pruebas, resulta muy lento ejecutar todas ellas cada vez que haces un cambio en la aplicación, sobre todo cuando fallan algunas pruebas. El motivo es que cada vez que arregles una prueba que había fallado, tienes que volver a ejecutar todas las pruebas para asegurarte de que no has roto nada nuevo. No obstante, mientras no se arreglen las pruebas que fallan, no tiene sentido volver a ejecutar todas las demás pruebas. Por ello, la tarea test:all dispone de una opción llamada --only-failed (-f es el atajo) que obliga a ejecutar solamente las pruebas que fallaron la última vez:

$ php symfony test:all --only-failed

La primera vez se ejecutan todas las pruebas, pero en las siguientes veces sólo se ejecutan las pruebas que fallaron la última vez. A medida que arregles el código de la aplicación, algunas pruebas se corregirán y por tanto ya no se volverán a ejecutar. Cuando se ejecuten correctamente todas las pruebas que fallaban, ya puedes volver a ejecutar de nuevo todo el conjunto de pruebas unitarias y funcionales.