No tienes acceso a esta clase

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

Curso de Introducción a Laravel 6

Curso de Introducción a Laravel 6

Profesor Italo Morales F

Profesor Italo Morales F

Refactorización y validación en Store

31/37
Recursos

Aportes 23

Preguntas 7

Ordenar por:

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

Para aprenderse los Códigos de estado HTTP: HTTP STATUS DOGS

Códigos Status 2xx:

  • 200: OK
  • 201: Created
  • 202: Accepted
  • 203: Non-Authoritative Information
  • 204: No content
  • 205: Reset Content
  • 206: Partial Content
  • 207: Multi Status
  • 208: Multi Estado

no entiendo absolutamente nada en este capitulo, vengo perfecto con el curso pero aqui me estallo el cerebro no entiendo NADA todo el capitulo lo senti como “haga asi, asa asi y asi” pero en cada paso la pregunta es PORQUE? COMO? DONDE? de donde salio?

Codigos Status 4xx.
400 Bad Request
401 Unauthorized
402 Payment Required
403 Forbidden
404 Not Found
405 Method Not Allowed
406 Not Acceptable
407 Proxy Authentication Required
408 Request Timeout
409 Conflict
410 Gone
411 Length Required
412 Precondition Failed
413 Payload Too Large
414 URI Too Long
415 Unsupported Media Type
416 Requested Range Not Satisfiable
417 Expectation Failed
418 I’m a teapot
421 Misdirected Request
422 Unprocessable Entity (WebDAV)
423 Locked (WebDAV)
424 Failed Dependency (WebDAV)
426 Upgrade Required
428 Precondition Required
429 Too Many Requests
431 Request Header Fields Too Large
451 Unavailable For Legal Reasons

Refactorización y validación en Store


  • HTTP Status 422 .→ significa que la solicitud está bien hecha pero fue imposible completarla.
public function test_validate_title() {
        $response = $this->json('POST', '/api/posts', [
            'title' => ''
        ]);

        $response->assertStatus(422)
            ->assertJsonValidationErrors('title'); // Solicitud OK, pero no se pudo concretar
    }

Explicación de HTTP Status con perros

Explicación de HTTP Status con gatos en flicker

Explicación de HTTP Status con gatos API

En el ejemplo de refactorización, lo que no pude comprender es cómo el constructor del controlador PostController obtiene como argumento la entidad Post? ¿Quién le envía ese argumento?

class PostController extends Controller {

    protected $post;

    public function __construct(Post $post) {
        $this->post = $post;
    }

Por si ha alguien le sirve, se me paso poner el authorize() a true y no entendia los errores que salian.

El listado completo de los Asserts:

Documentación oficila de PHPUnit

La refactorizacion de ese _construct(Post) , no comprendo que sentido tiene o como puede ser mejor.

Todo era perfecto hasta que llegue a Tests, es algo complejo de entender pero muy importante.

`There was 1 error:

  1. Tests\Feature\Http\Controllers\Api\PostControllerTest::test_store
    Error: Call to a member function create() on null`

Me manda ese error, me pueden ayudar, por favor!

https://www.restapitutorial.com/httpstatuscodes.html esta página me ha ayudado mucho en e uso de apis

Tests: 1 failed, 1 passed

Illuminate\Validation\ValidationException

The given data was invalid.

me sale ese error

refactorizando el codigo sin alterar el resultado

Resumen primer refactor: para mejor legibilidad
.
Usar propiedad en vez de facade
.

Dentro del controller:

	// 1. creo propiedad	
	protected $post;	

	// 2. recibo la entidad
	public function __construct(Post $post)	
	{
		// 3. asigno la entidad a la propiedad
		$this->post = $post;	
	}


	// En el metodo
	public function store(Request $request)
	{
		// $post = Post::create($request->all());	// uso Facade::

		// 4. uso la propiedad en vez del facade, para mayor legibilidad
		$post = $this->post->create($request->all());  

		return response()->json($post, 201);
	}
class PostTest extends TestCase
{
    use RefreshDatabase;

    public function test_store()
    {
        //$this->withoutExceptionHandling(); //PARA TESTING DETALLADO
        $response = $this->json('POST','/api/posts',[
            'title' => 'El Post de Prueba'
        ]);

        $response->assertJsonStructure(['id','title','created_at','updated_at'])
            ->assertJson(['title' => 'El Post de Prueba'])
            ->assertStatus(201); //OK Y CREADO UN RECURSO : CODIGO 201
        

        $this->assertDatabaseHas('posts',['title' => 'El Post de Prueba']);
    }

    public function test_validate_title()
        {
            $response = $this->json('POST','/api/posts',[
                'title' => ''
            ]);

            $response->assertStatus(422) //estatus 422: Imposible de completar
                ->assertJsonValidationErrors('title');
        }
    


}```

A Italo mis respetos, es un Excelente docente, he aprendido mucho de el en estos cursos, pero hoy asi me siento con testing,… es un tema que depronto por falta de experiencia me ha costado …

Me da este error

The given data was invalid.

Me da el error
Failed asserting that an array has the key ‘id’.

Listo el método Store, ahora vamos con el método Show.

Saludos, por casualidad alguien más se le muestra la consola así cuando se ejecuta php artisan test? porque no se entiendo el test si esta correcto pero como se podría hacer para que se visualice bien?

La validación del código de error funciona precisamente porque al crear el request de Post, cuando una validación falla, Laravel retorna el error junto con el código de error 422