Introducción

1

Desarrollo de Aplicaciones en Laravel con TDD y PHP Unit

2

Desarrollo de Proyectos con TDD en Laravel y Testing PHP

Proyecto

3

Instalación y configuración inicial de proyectos en Laravel

4

Configuración de Relaciones y Pruebas Unitarias en Laravel

5

Configuración de Relaciones en Laravel usando Testing

6

Protección de Rutas en Laravel con Middleware de Autenticación

7

Pruebas Automatizadas para Registro y Redirección en Base de Datos

8

Configuración de Actualización de Registros con Pruebas en PHP

9

Validación de Datos en Controladores: Configuración y Pruebas

10

Eliminación de Registros en Base de Datos con PHP y Tests

Póliticas de Acceso

11

Configuración de Políticas de Acceso en Repositorios

12

Políticas de Acceso y Eliminación de Repositorios en PHP

13

Configuración de Acceso a Repositorios Propios en Aplicaciones Web

14

Configuración del Método Show en Controladores PHP

Vistas del proyecto

15

Formulario de Edición con Diseño y Tests en Laravel

16

Testing de Formularios en PHP: Creación y Validación de Vistas

17

Configuración de Controladores y Vistas en Laravel para el Área Pública

18

Diseño Web con Tailwind CSS: Mejora de Apariencia y Formato

19

Pruebas y Configuración de Seeders en Proyectos Laravel

Refactorización

20

Refactorización de Código con Validación en PHP

21

Refactorización de Políticas de Acceso en Laravel

22

Configuración de Botones para Repositorios en Proyectos Web

Conclusión

23

Importancia de las Pruebas en Desarrollo de Software

No tienes acceso a esta clase

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

Testing de Formularios en PHP: Creación y Validación de Vistas

16/23
Recursos

¿Cómo configurar visualmente el entorno de desarrollo?

Al adentrarnos en el fascinante mundo de la programación, la visualización desde el navegador resulta clave para un desarrollo exitoso. Aunque esta clase se centra en la configuración correcta a nivel de programación, es vital entender cómo cada ajuste impacta en lo que veremos visualmente. En este espacio aprenderás a armar un formulario de creación que será pieza clave en nuestras vistas futuras.

¿Cómo construir un formulario de creación?

Comencemos con el testing adecuado de nuestro formulario de creación. Con nuestro editor abierto, dirigimos la atención al archivo ControllerTest y, al final de este, podemos iniciar con una estructura básica. La meta es asegurar que la vista de creación obtenga el status 200 del servidor, lo cual indica que la ruta funciona correctamente.

public function testCrearVista()
{
    $this->actingAs($usuario)
         ->get('/ruta/de/creacion')
         ->assertStatus(200);
}

¿Cómo configurar el controlador adecuadamente?

La lógica detrás de la organización del controlador es simple: facilitar futuras actualizaciones y mejoras. Colocamos el método de creación antes del de guardar, de modo que el código se mantenga lógico y ordenado.

public function crear()
{
    return view('crear');
}

¿Cómo diseñar la vista de creación?

Continuamos creando el archivo para nuestra vista en la carpeta de vistas y repositorios del proyecto: crear.blay.php. Aprenderás a repetir elementos del formulario pero asegurando que cada campo se configure correctamente.

{{-- Archivo crear.blay.php --}}
<form action="{{ route('store') }}" method="POST">
    @csrf
    <div>
        <label for="nombre">Nombre:</label>
        <input type="text" id="nombre" name="nombre">
    </div>
    <div>
        <label for="descripcion">Descripción:</label>
        <textarea id="descripcion" name="descripcion"></textarea>
    </div>
    <button type="submit">Guardar</button>
</form>

¿Cómo asegurarse de que el test sea exitoso?

Hemos visto cómo las pruebas aseguran un código limpio y funcional. Ejecutando php artisan test, verificamos que nuestro código funcione correctamente y cualquier error o detalle en el controlador, como la falta de un punto y coma, se detecta de inmediato.

php artisan test

¿Qué hacer si las pruebas fallan?

Si al ejecutar las pruebas notas que esperabas un status 403 pero recibes un 500, es momento de revisar el código. Puede ser un simple punto y coma o detalles en la configuración que necesiten atención. No temas a los errores, aprovecha esta oportunidad para perfeccionar tu código y asegurar su calidad.

Mantener un código de calidad antes de subirlo al servidor es crucial. Las pruebas no solo ahorran tiempo y recursos, sino que aseguran que presentemos un producto sólido y libre de errores. No olvides que la programación es un constante ciclo de mejora y aprendizaje. ¡Ánimo, y sigue programando con pasión y precisión!

Aportes 7

Preguntas 0

Ordenar por:

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

Para visualizar mejor los errores se puede agregar esta línea al inicio de la función del test:

$this->withoutExceptionHandling();

Ejemplo:

public function test_create()
{
    $this->withoutExceptionHandling(); #oculta la excepción del test
    $user = User::factory()->create();

    $this
        ->actingAs($user)
        ->get('repositories/create')
        ->assertStatus(200);
}
php artisan test

Modificados:

  • tests/Feature/Http/Controllers/RepositoryControllerTest.php
    • test_create
  • app/Http/Controllers/RepositoryController.php
  • resources/views/repositories/create.blade.php

Tests:

  • ir a ruta create repo y retornar status 200

Como usuario nos dirigimos a la ruta de creación del modelo Repositorio y obtenemos status 200. Para que pase el test hay que crear el método create en el Controller y luego la vista que pide le método:

public function test_create()
   {
    $user = User::factory()->create();
    $this->withoutExceptionHandling();
    $this
      ->actingAs($user)
      ->get('repositories/create')
      ->assertStatus(200)
  } 

Comparto el código de create.blade.php

<x-app-layout>
    <x-slot name="header">
        <h2 class="font-semibold text-xl text-gray-800 leading-tight">
            Crear Repositorio
        </h2>
    </x-slot>

    <div class="py-12">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-xl sm:rounded-lg p-4">
                <form action="{{ route('repositories.store') }}" method="POST" class="max-w-mg">
                    @csrf                    
                    <label class="block font-medium text-sm text-gray-700">URL *</label>
                    <input class="form-input w-full rounded-md shadow-sm" type="text" name="url"">

                    <label class="block font-medium text-sm text-gray-700">Description *</label>
                    <textarea class="form-input w-full rounded-md shadow-sm" type="text" name="description"></textarea>

                    <hr class="my-4">

                    <input type="submit" value="Guardar" class="bg-blue-500 text-white font-bold px-4 py-2 rounded-md">
                </form>

            </div>
        </div>
    </div>
</x-app-layout>

Bien pero no me gusto que no diera el ejemplo de como validar la interfaz, por lo que entiendo también podemos validar si los campos están correctos es decir el nombre del label o del botón, se que es algo practico y sencillo pero la idea es tener un standar para luego ampliar nuestro conocimiento. Dejo un Ejemplo, pero no se si esta bien??? agradezco cualquier sugerencia.

    public function test_create()
    {
        $user = User::factory()->create();
        
        $this->withoutExceptionHandling();//Sin hay alguna Exception la deja pasar de lo contrario usamos  withExceptionHandling 

        $this
            ->actingAs($user)
            ->get('repositories/create')//Vamos a la ruta
            ->assertSee('Repositorios')//Valido titulo del form
            ->assertSee('URL')//Valido label primer campo 
            ->assertSee('Description')//Valido label segundo campo 
            ->assertSee('Crear')//Valido nombre del boton 
            ->assertStatus(200);//Valida si conecta a la vista-> si la vista no esta creada te genera error 500
    }  

tests/Feature/Http/Controllers/RepositoryControllerTest.php

    public function test_create()
    {
        $user = User::factory()->create();

        $this
            ->actingAs($user)
            ->get('repositories/create')
            ->assertStatus(200);
    }

Adjunto mi commit de esta clase para el que no este haciendo las practicas ni quiera hacer los formularios

https://github.com/jlbousing/practica-tdd/commit/3cd12178c55857d71a93172e18a3f1109da9cb1c