Laravel 测试集合 JSON 使用 assertJson 的响应

Laravel Testing Collection JSON Response with assertJson

我想编写一个测试来创建一个用户,然后使用该路由测试该用户是否显示在用户 API 索引集合中。

我通读了 documentation 关于使用 Laravel 和 PHPUnit 编写 REST API 测试的文章。我很难让 assertJson 通过,因为它返回以下错误:

Failed asserting that an array has the subset Array &0 (
    'name' => 'Buck Trantow V'
    'email' => 'marianne.leffler@example.org'
    'username' => 'hhudson'
).
--- Expected
+++ Actual
@@ @@
     array (
     ),
   ),
-  'name' => 'Buck Trantow V',
-  'email' => 'marianne.leffler@example.org',
-  'username' => 'hhudson',
 )

测试:

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

        $response = $this
            ->actingAs($user, 'api')
            ->json('GET', '/api/users')
            ->assertStatus(200);

        $response
            ->assertJson([
                'name'     => $user->name,
                'email'    => $user->email,
                'username' => $user->username,
            ]);
    }

路由/用户控制器:

Route::resource('users', 'UserController');

用户控制器:

public function index()
    {
        return User::all();
    }

在这里张贴给任何需要它的人。我发现 assertJsonFragment 适用于这种情况。

      $response
            ->assertJsonFragment([
                'name'     => $user->name,
                'email'    => $user->email,
                'username' => $user->username,
            ]);