No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Testing método store

24/30
Recursos

¿Cómo probar la funcionalidad de creación en una aplicación?

Probar nuestras funcionalidades es esencial para garantizar que todo funcione como debería. Aquí te explicaremos cómo llevar a cabo la prueba de la función de creación en tu aplicación, simulando el envío de datos desde un formulario.

¿Cuál es el punto de partida para las pruebas?

El primer paso es visitar una ruta específica y analizar la respuesta obtenida. Habitualmente, se comienza por funcionalidad como index, show o eliminar. Para esta ocasión, nos centraremos en la función de creación.

Para ello, nos dirigimos al archivo de recetas y copiamos el código de show como base. Luego, nos aseguramos de adaptarlo para trabajar con el método de creación.

¿Cómo simular los datos de entrada?

Creamos una variable para las etiquetas, simulando los datos que el formulario podría enviar. Es crucial que no se intente crear una receta directamente; en su lugar, aprovechamos el método POST.

$etiquetas = []; // Simulación de datos de etiqueta

Para esta función, estructuramos un array que contenga todos los campos requeridos, como category ID, title y description. Para el título, utilizamos Faker para generar un texto aleatorio.

¿Cómo manejar diferentes tipos de datos?

Cada campo necesita atención particular para simular un escenario real:

  • Categoría: Usamos category ID como referencia.
  • Título: Generado aleatoriamente con Faker.
  • Descripción: Puede ser un breve párrafo.
  • Ingredientes: Se utiliza un texto que haga sentido con la realidad.
  • Instrucciones: También se maneja con un texto.
  • Imagen: Usamos una clase especial que simula la carga de un archivo. Se especifica que es un archivo PNG.
$image = new Image;
$image::fake()->image('file.png');

¿Qué rutas se deben visitar y qué esperar?

La siguiente acción es visitar la ruta de creación mediante POST. En lugar de trabajar con un ID, se pasa toda la información simulada. La expectativa es recibir un estado que confirme la creación correcta.

¿Qué clases y traits son necesarios?

Es vital importar las clases y traits necesarios para que el código funcione. Al añadir las instrucciones en la parte superior de tu archivo, garantizas que todo sea reconocido y funcione como esperado:

use Illuminate\Http\UploadedFile; // Para la carga de archivos
use Faker\Factory as Faker; // Para generar datos aleatorios

¿Qué sucede si algo falla en las pruebas?

Si en el proceso te encuentras con que falta una etiqueta u otro elemento, asegúrate de importar correctamente las clases correspondientes. Esto puede requerir ajustar el código:

use App\Models\Etiqueta;

¿Cómo confirmamos que la función es robusta?

Una vez estructurado el código, ejecutar la prueba como lo harías con PHP Artisan:

php artisan test

Al hacerlo, verifica que la salida del test coincida con las expectativas previas. Si el código se ejecuta sin errores, significa que la creación, las relaciones de datos, y la carga de archivos funcionan correctamente.

Probar tu aplicación asegura que cada funcionalidad publicada pueda ofrecer la calidad esperada. Atrévete a realizar estas prácticas en tus proyectos para tener una base sólida y confiable. ¡Sigue aprendiendo y mejorando día a día tus habilidades en desarrollo!

Aportes 2

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

En mi caso me salió error al cargar la imagen con el código implementado: ❌`GD extension is not installed.` Encontré esta solución en ChatGPT: 1. Abrir el archivo `php.ini` en tu editor de texto preferido. 2. Busca la línea `;extension=gd` y elimina el punto y coma al principio para habilitar la extensión GD. Debería verse así: `extension=gd` 3. Guarda el archivo y reinicia tu servidor web. Después de esto, deberías poder utilizar el método `image` de `UploadedFile::fake()` sin problemas.
**Complemento por aquí el código**, en este valido, además: * que la información haya quedado almacenada en la base de datos (por eso le paso datos específicos). * Valido el almacenamiento de la imagen en la carpeta ‘publica’ * Y valido también el almacenamiento en la tabla pivot que relaciona con tags. ```js public function test_api_route_store(): void { //Arrange 🛠 Storage::fake('public'); // Simulate the 'local' disk $user = Sanctum::actingAs(User::factory()->create()); $category = Category::factory()->create(); $image = UploadedFile::fake()->image('recipe.jpg', 640, 480)->size(1000); $tags = Tag::factory()->count(3)->create()->pluck('id')->toArray(); // Act ⚙️ $response = $this->postJson(route('v1.recipes.store'), [ 'title' => 'Test Recipe', 'description' => 'This is a test recipe', 'category_id' => $category->id, 'ingredients' => 'these are the ingredients', 'instructions' => 'these are the instructions', 'image' => $image, 'tags' => json_encode($tags), ]); // Assert ✅ // $response->assertStatus(201); // Ensure the recipe was created (HTTP 201) $response->assertStatus(Response::HTTP_CREATED); // 200 $this->assertDatabaseHas('recipes', [ 'title' => 'Test Recipe', 'description' => 'This is a test recipe', 'category_id' => $category->id, 'user_id' => $user->id, ]); $recipe = Recipe::where('title', 'Test Recipe')->first(); $this->assertNotNull($recipe); // Assert the image was stored Storage::disk('public')->assertExists($recipe->image); // Assert tags were attached $this->assertCount(3, $recipe->tags); } ```