Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Test Funcional con paginación (PHPUnit)

4 de febrero de 2015

Buenas

Estoy comenzando a testear mi aplicación Symfony. He comenzado por el controlador que muestra todas las entradas de la entidad (articulos), la cuál está paginado.

Al realizar el test me da un error 500 y desde el navegador funciona todo bien. He probado el mismo test utilizando otra ruta que no sea la que muestra los artículos paginados y el mismo test funciona bien.

// Error consola php bin/phpunit -c app/
 
1) JLGB\MiBundle\Tests\Controller\ArticleControllerTest::testListArticle
Failed asserting that 500 matches expected 200.
// Test
public function testListArticle()
{
    $client = static::createClient(array(), array(
        'PHP_AUTH_USER' => 'superadmin',
        'PHP_AUTH_PW'   => 'superadminpass',
    ));
 
    $crawler = $client->request('GET', '/administration/blog/article');
 
    // Si cambio otra ruta por ejemplo a '/administration/blog/article/new funciona'
    $this->assertEquals(200, $client->getResponse()->getStatusCode());
}

Muestro mi Ruta y el Controlador

article_lists:
    path:     /{page}
    defaults: { _controller: MiBundle:Article:list, page: 1 }
// Controller
public function listAction($page)
{
    if ($page <=0 ) {
        throw $this->createNotFoundException("No existen");
    }
 
    $postsPerPage = 10;
    --$page;
 
    $query = $this->getDoctrine()->getEntityManager()
        ->createQuery("SELECT a FROM MiBundle:Article a")
        ->setFirstResult($page * $postsPerPage)
        ->setMaxResults($postsPerPage);
 
    $paginator = new Paginator($query);
    $count = $paginator->count();
    $pageCount = ceil($count/$postsPerPage);
 
    return $this->render('MiBundle:article:article.html.twig', array(
        'page'     => $page + 1,
        'count'    => $pageCount,
        'articles' => $paginator,
        'postPerPage' => $postsPerPage,
    ));
}

¿Qué podría pasar? Un saludo y perdonar las molestias por las repetidas ocasiones de mis dudas.

Un saludo y gracias


Respuestas

#1

El código parece correcto y como dices que en el navegador funciona bien, podemos descartar un fallo de código en el controlador.

En estos casos, lo mejor es ver si el archivo app/logs/test.log tiene más información sobre el error. Si ahí no ves nada, puedes hacer lo siguiente para mostrar el contenido de la página que estás obteniendo de respuesta y que te está dando el error 500:

public function testListArticle()
{
    $client = static::createClient(array(), array(
        'PHP_AUTH_USER' => 'superadmin',
        'PHP_AUTH_PW'   => 'superadminpass',
    ));
 
    $crawler = $client->request('GET', '/administration/blog/article');
 
    dump($client->getResponse());
}

La función dump() es una versión mejorada de var_dump() que está disponible en las últimas versiones de Symfony. Si no la tienes, usa el var_dump() pero mejor sólo sobre el contenido de la respuesta:

var_dump($client->getResponse()->getContent());

@javiereguiluz

4 febrero 2015, 11:40
#2

Muchas gracias Javier por tu respuesta. Solucioné el problema, al realizar el:

dump($client->getResponse())

Me dio el error de que estaba utilizando la llamada al método:

$this->getDoctrine()->getEntityManager()

que está obsoleto desde la versión 2.1. Así que lo he sustituido por :

$this->getDoctrine()->getManager()

Lo que me queda la duda es ¿por qué funciona en el navegador y en el test no? :S Un saludo y muchas gracias

@JuanluGarciaB

4 febrero 2015, 12:06