FAKING EN LARAVEL: QUÉ ES Y CÓMO UTILIZARLO EN PRUEBAS

Faking es una funcionalidad de Laravel que permite simular el comportamiento de ciertos servicios durante las pruebas, sin que realmente se ejecuten. Siendo muy útil para:
  • Evitar que se envíen emails reales
  • Evitar que se disparen notificaciones reales
  • Evitar que se procesen jobs en la cola
  • Evitar subir archivos reales
  • etc..

Principales usos de Faking en tests

Servicio Cómo hacer Fake Uso común
Mail Mail::fake(); Probar que se envía un email
Notification Notification::fake(); Probar notificaciones
Event Event::fake(); Probar eventos
Queue Queue::fake(); Probar jobs en cola
Storage Storage::fake('public'); Probar subida de archivos
Bus Bus::fake(); Probar commands/jobs
Http Http::fake(); Probar llamadas HTTP externas
Facades Facade::fake(); o SpecificFacade::fake() Cualquier facade

Ejemplo práctico

// tests/Feature/RegistrationTest.php
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Notification;

public function test_user_registration()
{
Mail::fake();
Notification::fake();

$response = $this->post('/register', [
'name' => 'Juan',
'email' => 'juan@example.com',
// ...
]);

$response->assertRedirect();

// Verificar que se "envió" un email
Mail::assertSent(WelcomeMail::class, function ($mail) {
return $mail->hasTo('juan@example.com');
});

// Verificar que se envió una notificación
Notification::assertSentTo($user, NewUserNotification::class);
}

Ventajas del Faking

  • No se contaminan sistemas externos como email, APIs, base de datos de producción, etc.
  • Los tests son mucho más rápidos
  • Se pueden hacer hacer assertions muy específicos sobre qué se envió/procesó
  • Código más limpio y mantenible
Un "assertion" es una verificación que se hace en las pruebas para comprobar que el resultado obtenido es el que se esperaba.