Nuevo en Symfony 4.3: Mejores asertos para tests funcionales

Crear tests funcionales en Symfony es bastante sencillo gracias a las utilidades que proporciona la clase WebTestCase y gracias a los asertos de PHPUnit. Sin embargo, para algunos casos de uso habituales (por ejemplo, comprobar que la respuesta fue exitosa o que redirige a alguna URL) los métodos assert____() son demasiado básicos y requieren escribir mucho código.

De hecho, muchos programadores/as Symfony han creado sus propias utilidades para simplificar los tests. Por eso en Symfony 4.3 hemos decidido agrupar los asertos más útiles en un nuevo trait llamado Symfony\Bundle\FrameworkBundle\Test\WebTestAssertionsTrait. Como este trait se incluye por defecto dentro de la clase WebTestCase, solo tendrás que actualizar a Symfony 4.3 para disponer de todos esos asertos.

Ejemplo para comprobar que la respuesta recibida es correcta:

// antes
$this->assertSame(200, $client->getResponse()->getStatusCode());
 
// ahora
$this->assertResponseIsSuccessful();

Ejemplo para comprobar que la respuesta redirige a una URL específica:

// antes
$this->assertSame(301, $client->getResponse()->getStatusCode());
$this->assertSame('https://example.com', $client->getResponse()->headers->get('Location'));
 
// ahora
$this->assertResponseRedirects('https://example.com', 301);

Ejemplo para comprobar si un elemento contiene cierto texto:

// antes
$this->assertContains('Hello World', $crawler->filter('h1')->text());
 
// ahora
$this->assertSelectorTextContains('h1', 'Hello World');

Los nuevos asertos harán tu código más fácil de leer y escribir, mejorando tu productividad. Esta es la lista completa de nuevos asertos:

  • assertClientCookieValueEquals()
  • assertClientHasCookie()
  • assertClientNotHasCookie()
  • assertClientRawCookieValueEquals()
  • assertHttpCodeEquals()
  • assertInputValueEquals()
  • assertInputValueNotEquals()
  • assertPageTitleContains()
  • assertPageTitleEquals()
  • assertRequestAttributeValueEquals()
  • assertResponseCookieValueEquals()
  • assertResponseCookieValueNotEquals()
  • assertResponseHasCookie()
  • assertResponseHasHeader()
  • assertResponseHeaderEquals()
  • assertResponseHeaderNotEquals()
  • assertResponseIsSuccessful()
  • assertResponseNotHasCookie()
  • assertResponseNotHasHeader()
  • assertResponseRedirects()
  • assertRouteEquals()
  • assertSelectorContainsText()
  • assertSelectorExists()
  • assertSelectorNotContainsText()
  • assertSelectorNotExists()

Esta funcionalidad fue contribuida por Alex Rock y Fabien Potencier en el pull request #30813.

Fuente: New in Symfony 4.3: Better test assertions

Comentarios

Publicada el

21 de mayo de 2019

Etiquetas

Proyectos Symfony destacados

La forma más sencilla de generar el backend de tus aplicaciones Symfony. Ver más

Síguenos en @symfony_es para acceder a las últimas noticias.