Pruebas Unitarias en Laravel con Sanctum

WHAT TO KNOW - Sep 7 - - Dev Community

<!DOCTYPE html>





Pruebas Unitarias en Laravel con Sanctum


<br> body {<br> font-family: sans-serif;<br> margin: 0;<br> padding: 20px;<br> }<br> h1, h2, h3 {<br> margin-bottom: 10px;<br> }<br> pre {<br> background-color: #f0f0f0;<br> padding: 10px;<br> border-radius: 5px;<br> overflow-x: auto;<br> }<br> code {<br> font-family: Consolas, monospace;<br> }<br>



Pruebas Unitarias en Laravel con Sanctum



Las pruebas unitarias son una parte esencial del desarrollo de software, ya que ayudan a garantizar la calidad del código y a detectar errores de manera temprana. En el contexto de Laravel, la autenticación de usuarios es un componente fundamental, y Sanctum proporciona una forma sencilla de implementar la autenticación basada en tokens. Este artículo explora cómo integrar las pruebas unitarias con Sanctum en Laravel para asegurar la robustez de las funcionalidades relacionadas con la autenticación.



Introducción a Sanctum



Sanctum es un paquete de Laravel que ofrece una manera simple y ligera de implementar la autenticación de usuarios mediante tokens API. Su objetivo principal es facilitar la creación de APIs que requieren autenticación, sin la necesidad de complejas configuraciones de OAuth.



Sanctum se basa en el sistema de autenticación de Laravel y aprovecha las herramientas existentes para proporcionar una capa de abstracción sobre la gestión de tokens. Esto permite un proceso de desarrollo rápido y un enfoque más ágil para la gestión de la autenticación.



Pruebas Unitarias con Sanctum



Para probar las funciones de autenticación con Sanctum, es necesario comprender cómo se generan y validan los tokens. Estos son los pasos principales que se deben considerar al realizar pruebas unitarias:


  1. Generación de Tokens

Sanctum genera tokens de autenticación JWT (JSON Web Token) para identificar a los usuarios. Estos tokens contienen información sobre el usuario y se utilizan para verificar la identidad al acceder a recursos protegidos.

Ejemplo de Código


use Laravel\Sanctum\Sanctum;
use App\Models\User;


$user = User::factory()->create();

$token = Sanctum::actingAs($user)->currentAccessToken()->plainTextToken;



Este código crea un usuario de prueba, se autentica como ese usuario y genera un token. Este token puede utilizarse en las pruebas para simular solicitudes de un usuario autenticado.


  1. Verificación de Tokens

Sanctum utiliza middleware para verificar la autenticidad de los tokens en las solicitudes entrantes. Este middleware verifica la presencia del token en la solicitud y lo decodifica para obtener la información del usuario.

Ejemplo de Código


// En el método de prueba
$response = $this->withToken($token)->get('/api/protected-resource');


// Assertions
$response->assertStatus(200);



Este código envía una solicitud a un recurso protegido con el token generado anteriormente. Las assertions verifican que la solicitud se procesa correctamente y que el recurso se devuelve con un estado de éxito.


  1. Pruebas de Casos de Uso

Las pruebas unitarias no solo deben verificar la generación y verificación de tokens, sino también los casos de uso específicos relacionados con la autenticación. Por ejemplo, se pueden probar escenarios como el acceso a recursos protegidos, el registro de nuevos usuarios o la gestión de los permisos.

Ejemplo de Código


// Test de registro
public function testRegisterUser(): void
{
$data = [
'name' => 'Test User',
'email' => 'test@example.com',
'password' => 'password123',
];

$response = $this->post('/api/register', $data);

$response->assertStatus(201);
}

// Test de acceso a recurso protegido
public function testProtectedResourceAccess(): void
{
$user = User::factory()->create();
$token = Sanctum::actingAs($user)->currentAccessToken()->plainTextToken;

  $response = $this-&gt;withToken($token)-&gt;get('/api/protected-resource');

  $response-&gt;assertStatus(200);
  $response-&gt;assertJsonStructure(['data']); // Verificar estructura del JSON

}


  1. Pruebas de Fallas

Es fundamental probar los escenarios de falla para garantizar que el sistema se comporte correctamente en casos inesperados. Por ejemplo, se pueden probar casos como tokens inválidos, tokens caducados o intentos de acceso a recursos sin autorización.

Ejemplo de Código


// Test de token inválido
public function testInvalidToken(): void
{
$response = $this->withToken('invalid-token')->get('/api/protected-resource');

$response->assertStatus(401);
}

// Test de token caducado
public function testExpiredToken(): void
{
$user = User::factory()->create();
$token = Sanctum::actingAs($user)->createToken('test-token', ['*'], now()->subMinutes(10))->plainTextToken; // Token caducado

  $response = $this-&gt;withToken($token)-&gt;get('/api/protected-resource');

  $response-&gt;assertStatus(401);

}



Integración de Pruebas Unitarias en Laravel



Para integrar las pruebas unitarias en Laravel, se recomienda utilizar el framework de pruebas integrado de Laravel. Este framework ofrece una variedad de herramientas y características para facilitar la creación y ejecución de pruebas.


  1. Configuración del Entorno de Prueba

Es importante configurar un entorno de prueba independiente para evitar interferencias con el entorno de desarrollo. Se puede utilizar el archivo .env.testing para configurar las variables de entorno específicas del entorno de prueba.

Ejemplo de Código


// .env.testing
APP_ENV=testing
DB_CONNECTION=testing
...

  • Creación de Pruebas

    Laravel proporciona una utilidad de línea de comandos para crear pruebas: php artisan make:test TestName . Esta utilidad genera un archivo de prueba con un esqueleto básico.


  • Ejecución de Pruebas

    Para ejecutar las pruebas, se puede utilizar el comando php artisan test . Este comando ejecutará todas las pruebas definidas en el directorio tests .

    Recomendaciones para Pruebas Unitarias con Sanctum

    Para lograr pruebas unitarias efectivas con Sanctum, se recomienda seguir estas recomendaciones:

    • Utilizar los métodos de prueba de Laravel. Laravel proporciona métodos específicos para probar respuestas HTTP, como assertStatus , assertJson , etc. Estos métodos facilitan la verificación de las respuestas de las pruebas.
    • Probar los casos de uso comunes. Asegúrese de probar los escenarios de uso más comunes, como el registro de usuarios, la autenticación y el acceso a recursos protegidos.
    • Probar los escenarios de falla. No olvide probar los casos de falla, como tokens inválidos, tokens caducados, etc. Esto ayudará a garantizar que el sistema maneje correctamente las situaciones inesperadas.
    • Aislar las pruebas. Cada prueba debe ser independiente y no depender de otras pruebas. Esto ayuda a garantizar que las pruebas sean fiables y se puedan ejecutar en cualquier orden.
    • Documentar las pruebas. Es importante documentar las pruebas para que se comprendan fácilmente. La documentación debe incluir información sobre el propósito de la prueba, los pasos involucrados y los resultados esperados.

    Conclusión

    Las pruebas unitarias son esenciales para garantizar la calidad y la estabilidad de las aplicaciones Laravel que utilizan Sanctum para la autenticación. Al implementar estrategias de prueba sólidas que cubran los casos de uso y los escenarios de falla, se puede asegurar que las funcionalidades de autenticación funcionan correctamente y se reduce el riesgo de errores en la producción.

    Siguiendo las recomendaciones y utilizando las herramientas de prueba proporcionadas por Laravel, se puede crear un conjunto completo de pruebas unitarias que garanticen la confiabilidad de la aplicación.

    hljs.highlightAll();

  • . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
    Terabox Video Player