Blues Clues
Blues Clues

Reputation: 1848

assertJson is not equal to expected to actual in laravel

I'm new in unit tests in laravel and currently facing an error on my test. Please see my code below.

Test

/** @test */
public function users_can_view_homepage_products()
{
    $response = $this->get('api/products');
    
    $response->assertStatus(200)
        ->assertJson([
            'id' => 1,
            'name' => ucwords($this->faker->words(3, true)),
            'slug' => ucfirst($this->faker->slug),
            'intro' => $this->faker->sentence,
            'price' => number_format($this->faker->randomFloat(2, 100, 99999), 2)
        ]);
}

Controller

public function index()
{
    return [
        'id' => 1,
        'name' => 'Airpods Pro (2021)',
        'slug' => 'airpods-pro-2021',
        'intro' => 'New and powerful airpods from apple.',
        'price' => 12400
    ];
}

Error

Upvotes: 0

Views: 145

Answers (1)

Zakalwe
Zakalwe

Reputation: 1613

The test fails because the content of the json is different to that being tested. You probably want to test that the structure is the same, rather than the content:

/** @test */
public function users_can_view_homepage_products()
{
    $response = $this->get('api/products');
    
    $response->assertStatus(200)
        ->assertJsonStructure([
            'id',
            'name'
            'slug'
            'intro'
            'price'
        ]);
}

Upvotes: 1

Related Questions