馃敩 Pruebas de Unidad y Pruebas de Caracter铆stica a fondo
Garantizando la calidad y previniendo errores futuros
El **Testing** es la pr谩ctica de verificar que tu c贸digo se comporta como esperas. En Laravel, las pruebas se escriben con **PHPUnit** y son esenciales para el desarrollo profesional. Un buen conjunto de pruebas te permite refactorizar (reestructurar) c贸digo o a帽adir nuevas funcionalidades con la confianza de que no est谩s rompiendo partes existentes de la aplicaci贸n. Laravel distingue principalmente dos tipos de pruebas: **Unidad** y **Caracter铆stica (Feature)**.
馃И Configuraci贸n y Ejecuci贸n de Pruebas
Todas las pruebas residen en la carpeta **`tests/`**. Laravel utiliza el archivo de entorno `phpunit.xml` que, por defecto, carga las configuraciones de prueba desde un archivo `.env` espec铆fico, asegurando que tus pruebas no ensucien tu base de datos de desarrollo.
Para ejecutar todas las pruebas, usa Artisan:
Ejecuci贸n de todas las pruebas
php artisan test
馃З Pruebas de Unidad (Unit Testing)
Las **Pruebas de Unidad** se enfocan en probar una peque帽a porci贸n aislada de tu c贸digo, como una funci贸n o una clase, sin tocar el framework, la base de datos o el sistema de archivos. El objetivo es asegurar que la **l贸gica de negocio** funciona correctamente de forma at贸mica.
Ejemplo: Probar una clase de utilidad
Queremos probar un m茅todo que calcula el descuento, asegurando que no requiere inicializar Laravel.
Prueba de Unidad (tests/Unit/CalculadoraTest.php)
namespace Tests\Unit;
use PHPUnit\Framework\TestCase;
use App\Utilities\Calculadora;
class CalculadoraTest extends TestCase
{
/** @test */
public function el_calculo_de_descuento_es_correcto()
{
$monto = 100;
$descuento = 0.10; // 10%
$resultado = Calculadora::aplicarDescuento($monto, $descuento);
// Assertions: Verificamos que el resultado es el esperado
$this->assertEquals(90, $resultado);
}
}
馃寪 Pruebas de Caracter铆stica (Feature Testing)
Las **Pruebas de Caracter铆stica** prueban porciones m谩s grandes de tu aplicaci贸n, incluyendo la forma en que interact煤an las rutas, los controladores, las bases de datos y las vistas. Simulan peticiones HTTP reales a la aplicaci贸n (GET, POST, etc.). Son cruciales para probar el flujo completo de una *caracter铆stica* del usuario (ej. registro, env铆o de formulario, carga de p谩gina).
Ejemplo: Crear un Post (CRUD)
Usaremos **Factories y la base de datos en memoria (SQLite)** para simular el entorno real sin afectar los datos de desarrollo (mira la entrada de Factories y Seeders).
Prueba de Caracter铆stica (tests/Feature/PostTest.php)
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
use App\Models\User;
use App\Models\Post;
class PostTest extends TestCase
{
use RefreshDatabase; // Resetea la BD por cada prueba
/** @test */
public function un_usuario_autenticado_puede_crear_un_post()
{
// 1. Preparaci贸n: Crear un usuario usando Factory
$user = User::factory()->create();
// 2. Acci贸n: Actuamos como el usuario y enviamos un POST
$response = $this->actingAs($user)->post('/posts', [
'titulo' => 'Mi Nuevo Post de Prueba',
'contenido' => 'Contenido de mi nuevo post.',
]);
// 3. Verificaci贸n (Assertions)
$response->assertStatus(302); // Esperamos una redirecci贸n
$response->assertRedirect('/posts'); // A la lista de posts
// Verificamos que el registro existe en la base de datos
$this->assertDatabaseHas('posts', [
'titulo' => 'Mi Nuevo Post de Prueba',
'user_id' => $user->id,
]);
}
}
馃幆 La Clave del Testing: Los Assertions
La parte m谩s importante de cualquier prueba son los **Assertions** (aserciones). Son los m茅todos que verifican que el comportamiento del c贸digo es el esperado.
- **
$this->assertEquals(esperado, real)**: Verifica que dos valores son iguales. (Unidad) - **
$response->assertStatus(c贸digo)**: Verifica el c贸digo HTTP de la respuesta (ej. 200, 302, 403). (Caracter铆stica) - **
$response->assertSee('Texto')**: Verifica que un texto aparece en el HTML de la respuesta. (Caracter铆stica) - **
$this->assertDatabaseHas('tabla', ['campo' => 'valor'])**: Verifica que existe un registro en la base de datos con ciertos datos. (Caracter铆stica)
0 Comentarios
Si desea contactar comigo, lo puede hacer atravez deste formulario gracias