Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Index con TDD

34/36
Recursos

Aportes 27

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Por si tienen laravel 8.x y les sale el error con el factory

public function test_index()
    {
        Post::factory()->count(5)->create();
        $response = $this->json('GET','api/posts');
        $response->assertJsonStructure([
            'data' => [
                '*' => ['id','title','created_at','updated_at']
            ]
        ])->assertStatus(200);
    }

Tuve que utilizar este código para que no me enviara error.

public function index()
 {
    return Post::paginate();
 }

Para muchos como yo no es facil cambiar la forma en la que programas. Sacarte las costumbres, seguir aprendiendo entender que si hay cosas nuevas probablemente traen mejoras (nada lo garantiza) es parte del crecimiento como programador.

Hasta ahora todo ha estado genial y quizás lo mas difícil es aprenderse los métodos que se utilizan para probar cada cosa

conclusion, no usare TDD nunca para no tardar 4000000000 años en terminar un proyecto y que mi cliente no se enoje y me trate mal cuando le diga que me tardo mucho

Interesante, aunque igual sería interesante ver cómo se escribiría el test para una estructura de varios niveles con objetos distintos en cada posición del JSON

Código de prueba método index =>

public function test_index()
    {
        Post::factory()->count(10)->create();
        $response = $this->json('GET','api/posts');
        $response->assertJsonStructure([
            'data' => [
                '*' => ['id','title','created_at','updated_at']
            ]
        ])->assertStatus(200); // OK
    }
public function index()
    {
        return response()->json(
            $this->post->paginate());
    }```

En laravel 9.5

Como quedo el código para la versión 18

 public function test_index()
    {
        Post::factory(5)->create();

        $response = $this->json('GET','/api/posts');

        $response->assertJsonStructure([
            'data' =>[
                '*' => ['id', 'title','created_at', 'updated_at']
            ]
        ])->assertStatus(200);
    }

Luz Verde, Luz Roja👧

    public function test_index()
    {
        factory(Post::class,5)->create();

        $response = $this->json('GET','/api/posts');

        $response->assertJsonStructure([
            'data'=>[
                '*' => ['id','title','created_at','updated_at']
            ]])->assertStatus(200);
    }

Recomienda revisar la sección de “API Resources”, es una forma de organizar mejor nuestra data al momento de retornala 😁

👇
https://laravel.com/docs/7.x/eloquent-resources

Test Controller:

/**
     * Feature for list all resources test
     *
     */
    public function test_index()
    {
        factory(Post::class, 5)->create();

        $response = $this->json('GET', '/api/posts');

        $response->assertJsonStructure([
            'data' => [
                '*' => ['id', 'title', 'created_at', 'updated_at']
            ]
        ])->assertStatus(200); //OK
    }

Route Controller

/**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        return response()->json(
            $this->post->paginate(), 200
        );
    }

Qué es lo que hacía el método paginate?

Documentacion de la paginación en Laravel docs

Genial la paginación que se hace de forma automática por parte de Laravel, simplemente espectacular!!!

Genial 😃

public function test_index() {
    //$this->withoutExceptionHandling();
    $post = factory(Post::class, 5)->create();
    $response = $this->json('GET', "/api/posts/");
    $response->assertJsonStructure([
        'data' => [ '*' => ['id', 'title', 'created_at', 'updated_at']]])
        ->assertStatus(200);//OK
}  


public function index() {
    return response()->json($this->post->paginate());
}

PostControllerTest

public function test_index()
    {
        factory(Post::class, 5)->create();

        $response = $this->json('GET', '/api/posts');

        $response->assertJsonStructure([
            'data' =>[
                '*' => ['id', 'title', 'created_at', 'updated_at']
            ]
        ])->assertStatus(200); //OK
    }

PostController

	public function index()
    {
        return response()->json($this->post->paginate());
    }

PHPUnit 8.5.3 by Sebastian Bergmann and contributors.

… 7 / 7 (100%)

Time: 295 ms, Memory: 26.00 MB

public function index()
    {
        return response()->json(
            $this->post->paginate(),200);

    }
public function test_index()
        {
            factory(Post::class,5)->create();

            $response = $this->json('GET','api/posts');

            $response->assertJsonStructure([
                'data' => [
                    '*' => ['id','title','created_at','updated_at']
                ]
                ])->assertStatus(200); //OK
        }

Excelente este ejercicio de pruebas con TDD.

Todo bien. Ya ubique el curso de PHPUnit, voy por el para profundizar.

Aporte de la clase Index con TDD

Prueba


    public function test_index()
    {
        factory(Post::class, 5)->create();

        $response = $this->json('GET', 'api/posts');

        $response->assertJsonStructure([
            'data' => [
                '*' => ['id', 'title', 'created_at', 'updated_at']
            ]
        ])->assertStatus(200);
    }

Función index de PostController


    public function test_index()
    {
        factory(Post::class, 5)->create();

        $response = $this->json('GET', 'api/posts');

        $response->assertJsonStructure([
            'data' => [
                '*' => ['id', 'title', 'created_at', 'updated_at']
            ]
        ])->assertStatus(200);
    }

Resultado de prueba

No estoy entendiendo por qué esto
$this->post->paginate()
trae todos los post si $this->post es un post solo creado en el constructor?

cumpliendo:

public function test_index()
    {
        // $this->withoutExceptionHandling();
        $post = Post::factory()->count(5)->create();
        $response = $this->json('GET', "/api/posts");

        $response->assertJsonStructure([
            'data' => [
                '*' => ['id','title','created_at','updated_at']
            ]
        ])->assertStatus(200);
    }

public function test_index()
    {
        factory(Post::class, 5)->create();

        $response = $this->json('GET', '/api/posts');

        $response->assertJsonStructure([
            'data' => [
                '*' => [
                    'id',
                    'title',
                    'created_at',
                    'updated_at'
                ]
            ]
        ])->assertStatus(200);
    }

Mi código.

public function test_index()
    {
        // Con esto vemos el mensaje del error
        $this->withoutExceptionHandling();

        // Primero se crea el post
        $post = Post::factory()->count(5)->create();

        // Accedemos al método GET para listar datos
        $response = $this->json('GET', '/api/posts');

        //Creamos las validaciones
        $response->assertJsonStructure([
            'data' => [
                '*' => ['id', 'title', 'created_at', 'updated_at']
            ]
        ])->assertStatus(200); // Status Ok

    }
public function index()
    {
        //dd(Post::paginate());
        return response()->json(Post::paginate());
    }