Helper para iniciar sesión en tests Pest

Iniciar sesión como un usuario es algo muy usual que hacemos en nuestros tests. Principalmente en endpoints donde la creación de modelos deben estar asociados al usuario que los haya creado. Por ejemplo, el autor de una entrada de blog $post->author.

Una forma de hacerlo es utilizar el método actingAs que Laravel proporciona.

<?php

test('application', function () {
    $this->actingAs(App\Models\User::factory()->create());
});

Pero sería bueno abstraer esta lógica en un helper que sea más declarativo. Por ejemplo login(). En Pest podemos hacerlo definiendo test helpers en el archivo tests/Pest.php.

Haremos que al helper se le puede pasar un usuario, de lo contrario generaremos uno. Para poder acceder a nuestro TestCase fuera de una clase debemos utilizar el test() helper. Esto nos devuelve el TestCase actual de dónde se haya llamado nuestra función login.

<?php

// tests/Pest.php

// ...

function login($user = null)
{
    return test()->actingAs($user ?? App\Models\User::factory()->create());
}

Ahora podemos utilizar nuestro helper en los tests.

<?php

test('application', function () {
    login();
});