Nuevo en Symfony 5.1: Login más sencillo en los tests

En los tests funcionales, a veces tienes que loguearte como usuario para testear páginas protegidas por seguridad. Reproducir el proceso completo de login (ej. introducir el nombre y contraseña en un formulario y enviarlo) hace que los tests sean más lentos. Symfony recomienda un truco para evitar este problema, pero puede que no te sirva para tu aplicación.

Por ese motivo, en Symfony 5.1 hemos añadido un nuevo método llamado loginUser() que simula el login de un usuario dentro de un test. El método solo requiere que le pases el objeto que representa al usuario (el objeto debe implementar la interfaz UserInterface):

// tests/Controller/ProfileControllerTest.php
namespace App\Tests\Controller;
 
use App\Repository\UserRepository;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
 
class ProfileControllerTest extends WebTestCase
{
    // ...
 
    public function testVisitingWhileLoggedIn()
    {
        $client = static::createClient();
 
        // obtén o crea el usuario de alguna manera (ej. creando usuarios específicos
        // para tests cuando cargues los "fixtures" o datos de prueba de los tests)
        $userRepository = static::$container->get(UserRepository::class);
        $testUser = $userRepository->findOneByEmail('[email protected]');
 
        $client->loginUser($testUser);
 
        // el usuario ya está logueado, así que pueden testear páginas protegidas
        $client->request('GET', '/profile');
        $this->assertResponseIsSuccessful();
        $this->assertSelectorTextContains('h1', '¡Hola Usuario!');
    }
}

Esta funcionalidad fue contribuida por Wouter De Jong en el pull request #35997.


Fuente: New in Symfony 5.1: Workflow improvements

Comentarios

Publicada el

23 de marzo de 2020

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.