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 plataforma de eCommerce 100% Symfony que rivaliza con Magento y PrestaShop. Ver más

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