php-testing-en-php-con-phpunit-y-pest

Testing en PHP con PHPUnit y Pest

  • 3 min

Una prueba automatizada es código que ejecuta una parte de la aplicación y comprueba que produce el resultado esperado.

Hasta ahora, tu método de “testing” probablemente ha sido:

Escribir código.

Ir al navegador.

Pulsar F5.

Probar manualmente si el formulario funciona.

Esto se llama Testing Manual y tiene un problema: es lento y propenso a errores humanos. Si cambias algo en la página de Login, ¿te acuerdas de volver a probar el Registro para ver si se rompió? Seguramente no.

El Testing Automatizado consiste en escribir código que prueba tu código. Ejecutas un comando y en 1 segundo se comprueban 500 funciones de tu web. Si algo falla, sale una luz roja.

¿Qué es una “prueba unitaria” (unit test)?

Es la prueba más básica. Consiste en aislar una pequeña pieza de código (normalmente una función o método de una clase) y comprobar que:

  • Dada una entrada X (Input).
  • Se obtiene una salida Y (Output).

Seguimos el patrón AAA:

  1. Arrange (Preparar): Preparar los datos.
  2. Act (Actuar): Ejecutar la función.
  3. Assert (Afirmar): Comprobar si el resultado es el esperado.

La herramienta estándar: PHPUnit

PHPUnit es el estándar de la industria. Casi todos los frameworks (Laravel, Symfony) lo usan por debajo. Se instala vía Composer (composer require --dev phpunit/phpunit).

Imagina que tienes esta clase simple:

src/Calculadora.php

class Calculadora {
    public function sumar($a, $b) {
        return $a + $b;
    }
}
Copied!

Así se escribe su test en PHPUnit:

tests/CalculadoraTest.php

use PHPUnit\Framework\TestCase;

class CalculadoraTest extends TestCase {
    
    // Los tests deben empezar por la palabra "test"
    public function testSumaCorrectamente() {
        // 1. ARRANGE
        $calc = new Calculadora();
        
        // 2. ACT
        $resultado = $calc->sumar(2, 3);
        
        // 3. ASSERT (La parte clave)
        // Le decimos: "Espero que $resultado sea igual a 5"
        $this->assertEquals(5, $resultado);
    }
}
Copied!

Al ejecutar el test en la consola, verás una barra VERDE (Pasó). Si cambias la función sumar para que reste, verás una barra ROJA (Falló) y sabrás que has roto algo.

La alternativa moderna: Pest

Pest es una herramienta más nueva que se está volviendo muy popular, especialmente en el ecosistema Laravel. Pest corre sobre PHPUnit, pero con una sintaxis mucho más limpia y cercana al lenguaje humano.

El mismo test anterior, escrito en Pest:

test('la calculadora puede sumar dos numeros', function () {
    $calc = new Calculadora();
    
    // Sintaxis fluida: "Espera que sumar(2,3) sea 5"
    expect($calc->sumar(2, 3))->toBe(5);
});
Copied!

¿Por qué deberías empezar a testear?

  1. Duermes tranquilo: Si todos tus tests están en verde antes de subir a producción, sabes que no has roto nada crítico.
  2. Documentación viva: Un test explica perfectamente qué hace tu código y cómo se usa.
  3. Refactorización sin miedo: Puedes limpiar y mejorar tu código antiguo. Si rompes algo, el test te avisará inmediatamente.