Buenas prácticas oficiales de Symfony

11.2. Tests funcionales

Como crear los tests funcionales de la aplicación lleva un tiempo, muchos programadores los ignoran completamente y no hacen ningún test. La recomendación es que al menos desarrolles unos tests funcionales sencillos, ya que te costará muy poco tiempo y verás que son muy útiles para descubrir lo antes posible errores graves en tu aplicación.

Buena Práctica Define al menos un test funcional que compruebe que todas las páginas de tu sitio o aplicación se cargan bien.

Este test funcional es tan sencillo como lo siguiente:

/** @dataProvider provideUrls */
public function testPageIsSuccessful($url)
{
    $client = self::createClient();
    $client->request('GET', $url);

    $this->assertTrue($client->getResponse()->isSuccessful());
}

public function provideUrls()
{
    return array(
        array('/'),
        array('/posts'),
        array('/post/fixture-post-1'),
        array('/blog/category/fixture-category'),
        array('/archives'),
        // ...
    );
}

El código de este ejemplo comprueba que todas las URLs indicadas se cargan bien. Para ello se utiliza el método isSuccessful(), que comprueba si el código de estado HTTP se encuentra entre 200 y 299. Aunque puede parecerte que este test no es demasiado útil, en realidad merece la pena añadirlo a tu suite de tests por el poco esfuerzo que te costará crearlo.

11.2.1. No generes las URL de los tests

Quizás te estés preguntando por qué en el anterior test funcional no se usa el servicio generador de URL a partir del nombre de las rutas.

Buena Práctica Escribe las URL de los tests a mano, sin utilizar el servicio router de Symfony para generarlas.

Imagina que dispones del siguiente test funcional que utiliza el servicio router para generar la URL a partir del nombre de la ruta:

public function testBlogArchives()
{
    $client = self::createClient();
    $url = $client->getContainer()->get('router')->generate('blog_archives');
    $client->request('GET', $url);

    // ...
}

Aunque el código anterior funciona correctamente, tiene una desventaja muy grande. Si un programador cambia sin querer la URL de la ruta blog_archives, este test no se romperá y por tanto no te darás cuenta del error. Sin embargo, la URL anterior dejará de funcionar para los visitantes del sitio, por lo que todos los enlaces anteriores y todos los marcadores dejarán de funcionar sin que te des cuenta.

11.2.2. Archivos de datos

Si en tu aplicación quieres generar buenos archivos con datos de prueba, puedes utilizar las librerías Faker y Alice.