Desarrollo Guiado por Pruebas en Laravel: Configuración y Ejecución

Clase 30 de 37Curso de Introducción a Laravel 6

Resumen

¿Qué es el desarrollo guiado por pruebas (TDD)?

El desarrollo guiado por pruebas, conocido como TDD por sus siglas en inglés (Test-Driven Development), es un enfoque de programación que, comparado con la metodología tradicional, cambia la manera en la que desarrollamos software. Aquí, empezamos escribiendo una prueba antes de desarrollar cualquier funcionalidad. Esta prueba guía el desarrollo hasta lograr un código correcto. A diferencia de programar directamente y corregir errores directamente en el navegador, TDD nos permite centrarnos en asegurar que cada pequeña parte del código hace exactamente lo que debe.

¿Cómo comenzar con TDD en Laravel?

En Laravel, el primer paso para implementar TDD es configurar una prueba para el método que deseas desarrollar. En este caso, se trata del método store para una API que permite guardar datos mediante una solicitud POST en formato JSON. La prueba se encargará de:

  1. Conectar correctamente la aplicación con la ruta definida.
  2. Comprobar que los datos enviados están siendo almacenados adecuadamente.
  3. Verificar que la estructura JSON retornada corresponde a lo planificado.
  4. Asegurarse de que el estado HTTP devuelto, en este caso un 201, refleja la correcta creación del recurso.

Código de ejemplo para pruebas

El contenido del test podría verse así:

public function test_debe_guardar_un_post()
{
    $response = $this->postJson('/api/posts', [
        'title' => 'Post de prueba',
    ]);

    $response
        ->assertStatus(201)
        ->assertJson([
            'title' => 'Post de prueba',
            'created_at' => true,
            'updated_at' => true,
        ]);

    $this->assertDatabaseHas('posts', [
        'title' => 'Post de prueba'
    ]);
}

Configurando la base de datos para el test

Debes asegurarte que tu base de datos de pruebas tenga la estructura necesaria, como la tabla posts con el campo title. Utiliza migraciones para configurar la estructura que desea verificar en tu prueba.

¿Cómo escribir código para pasar las pruebas?

Tras definir tus pruebas, es hora de desarrollar el código necesario para cumplirlas. Podrías implementar el método store en un controlador de la siguiente manera:

public function store(Request $request)
{
    $post = Post::create($request->all());

    return response()->json($post, 201);
}

Este código espera recibir un conjunto de datos, guardarlos en la base de datos, y devolver una respuesta JSON con el nuevo recurso creado. Siempre es posible ajustar la función para que cumpla con todos los requisitos de la prueba.

¿Qué hacer ante errores en las pruebas?

Los errores en las pruebas son sumamente útiles; te indican exactamente qué parte de tu código no se ajusta a las expectativas. Por ejemplo, si la prueba indica que una ruta no funciona, verifica que esté correctamente definida:

Route::post('/api/posts', [PostController::class, 'store']);

Usando comandos de Laravel, se puede listar las rutas actuales y verificar que todas estén correctamente configuradas.

¿Por qué elegir TDD?

Optar por TDD asegura que tu código tenga alta calidad y sea mantenible a largo plazo. Cada modificación futura estará respaldada por pruebas que garantizarán que nuevas implementaciones no quiebren el código existente. Además, centraliza el enfoque en la funcionalidad principal desde el comienzo del desarrollo.

Este método es particularmente poderoso en Laravel, donde la integración con PHPUnit facilita la escritura y ejecución de pruebas. ¡No dudes en continuar profundizando en TDD y perfeccionar tus habilidades como desarrollador!