Test Driven Development (TDD) en el desarrollo de aplicaciones en Laravel

Voy a hablarte sobre la técnica de TDD o Desarrollo basado en pruebas en base a una prueba para el listado paginado y detalle de un blog.

En esta entrada, hablaré sobre el TDD y un ejemplo de como funsiona esta técnica y porqué tiene sentido emplear este tipo de técnicas al momento de desarrollar.

¿Qué es TDD?

Como consideración adicional, hablamos sobre una técnica llamada Test Driven Development (TDD) en español, Desarrollo basado en pruebas, también conocido como desarrollo guiado por pruebas, la cual es una práctica de programación en la que se escriben pruebas antes de crear el código de la funcionalidad siguiendo los siguientes aspectos claves:

  1. Al definir primero las pruebas, permite especificar cada funcionalidad antes de escribir el código real, es como una especie de árbol mental, pero con código, de esta forma, se guía el proceso de desarrollo.
  2. Código limpio y robusto: El objetivo es crear un código limpio, robusto y simple. Si las pruebas fallan, se corrigen los errores antes de avanzar.

Ejemplo para evaluar el Desarrollo basado en pruebas

Para dar un ejemplo de la importancia de las pruebas en el desarrollo de software y por supuesto, que se aplica al desarrollo en Laravel.

La prueba del listado paginado será similar al realizado en la API Rest, pero, la evaluación de la respuesta al no se un JSON si no, un listado paginado, se emplean métodos específicos para tal fin:

tests\Feature\Web\BlogTest.php

<?php
namespace Tests\Feature\Web;

use App\Http\Controllers\blog\BlogController;
use App\Models\Post;
use Illuminate\Foundation\Testing\DatabaseMigrations;

use Illuminate\Pagination\LengthAwarePaginator;
use Tests\TestCase;

class BlogTest extends TestCase
{
    use DatabaseMigrations;

    function test_index()
    {
        // $response = $this->get('/blog')
          $this
            ->get(route('blog.index'))
            ->assertStatus(200)
            ->assertViewIs('blog.index')
            ->assertSee('Post List')
            ->assertViewHas('posts', Post::paginate(2));
           $this->assertInstanceOf(LengthAwarePaginator::class,$response->viewData('posts'));
    }
}

En esta prueba, veremos varios aspectos interesantes, para variar, mostramos que también podemos emplear una ruta con nombre:

->get(route('blog.index'))

Con este método de aserción, verificamos por el nombre de la vista, junto con su ruta:

->assertViewIs('blog.index')

Con este método, verificamos por la data suministrada a la vista y su nombre, que en este caso es el de posts, que es el listado paginado para los posts:

->assertViewHas('posts', Post::paginate(2));

Con el siguiente método de aserción, obtenemos la data de la vista:

$response->viewData('posts')

Y verificamos que sea instancia de una clase, al estar empleando el:

Post::paginate(2)

Sabemos que es de LengthAwarePaginator:

$this->assertInstanceOf(LengthAwarePaginator::class,$response->viewData('posts'));

Esta prueba, que es nuestra primera prueba real sobre la app en Laravel que devuelve una vista, entiéndase un contenido HTML generado con blade y no algo tan simple o plano como un JSON y con esto, podemos ver métodos de aserción más específicos para garantizar que la data tenga el formato esperado, como puedes ver, estas pruebas también sirven para especificar donde y como deben estar compuesta elementos como los datos, vista y ruta, por lo tanto, al especificar una estructura clara, tienen sentido técnicas como la de TDD que en pocas palabras, al momento de desarrollar un nuevo proyecto, primero se inicia con las pruebas y son las pruebas las que especifican que es lo que se debe de implementar a nivel de funcionalidades.

- Andrés Cruz

In english

Este material forma parte de mi curso y libro completo; puedes adquirirlos desde el apartado de libros y/o cursos Curso y Libro Laravel 11 con Tailwind Vue 3, introducción a Jetstream Livewire e Inerta desde cero - 2025.

Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.

!Cursos desde!

10$

En Udemy

Quedan 0d 16:12!


Udemy

!Cursos desde!

4$

En Academia

Ver los cursos

!Libros desde!

1$

Ver los libros
¡Hazte afiliado en Gumroad!