Laravel proporciona herramientas para manejar archivos y sistemas de almacenamiento que facilitan el desarrollo y pruebas. El uso de Storage
en tests permite simular interacciones con el sistema de archivos sin afectar el almacenamiento real, lo que es ideal para asegurar que nuestras aplicaciones funcionen como se espera en situaciones controladas.
En Laravel, podemos usar el método Storage::fake()
para simular un sistema de archivos temporal durante los tests. Este método crea un almacenamiento virtual que permite hacer pruebas de manera aislada, sin afectar los archivos reales.
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_file_is_stored()
{
// Crear un almacenamiento falso
Storage::fake('local');
// Ejecutar el código que sube el archivo
$response = $this->post('/upload', [
'file' => UploadedFile::fake()->image('example.jpg')
]);
// Verificar que el archivo se guardó en el almacenamiento simulado
Storage::disk('local')->assertExists('example.jpg');
}
}
En este ejemplo, al llamar a Storage::fake('local')
, Laravel crea un sistema de archivos temporal. Luego, el método assertExists
verifica si el archivo se guardó correctamente en el almacenamiento falso. Una vez terminado el test, todo el almacenamiento simulado se elimina, sin dejar archivos residuales en el disco.
Storage::disk('local')->assertMissing('nonexistent.jpg');
Este método se asegura de que un archivo específico no esté en el almacenamiento. Esto es útil para verificar que archivos no deseados no están presentes.
UploadedFile
Laravel permite generar archivos falsos para pruebas mediante UploadedFile::fake()
. Por ejemplo, para subir imágenes:
$file = UploadedFile::fake()->image('avatar.jpg');
$response = $this->post('/profile', [
'avatar' => $file,
]);
Este método genera un archivo temporal que se puede manipular y verificar durante los tests.
Laravel permite comparar el contenido de los archivos en el almacenamiento simulado:
Storage::disk('local')->put('example.txt', 'Contenido de prueba');
Storage::disk('local')->assertExists('example.txt');
Storage::disk('local')->assertStringEqualsFile('example.txt', 'Contenido de prueba');
Este test comprueba que el archivo contiene el texto exacto que se espera.
Para más detalles, puedes consultar la documentación oficial de Laravel.
Jorge García
Fullstack developer