Laravel assertJson не удалось - PullRequest
0 голосов
/ 13 мая 2019

У меня проблема с этим тестом:

$this->json('POST', 'api/login')
        ->assertStatus(422)
        ->assertJson([
            'email' => ['The email field is required.'],
            'password' => ['The password field is required.'],
        ]);

И я не понимаю, в чем ошибка:

Unable to find JSON: 

[{
    "email": [
        "The email field is required."
    ],
    "password": [
        "The password field is required."
    ]
}]

within response JSON:

[{
    "message": "The given data was invalid.",
    "errors": {
        "email": [
            "The email field is required."
        ],
        "password": [
            "The password field is required."
        ]
    }
}].


Failed asserting that an array has the subset Array &0 (
    'email' => Array &1 (
        0 => 'The email field is required.'
    )
    'password' => Array &2 (
        0 => 'The password field is required.'
    )
).
--- Expected
+++ Actual
@@ @@
    0 => 'The password field is required.',
    ),
),
-  'email' => 
-  array (
-    0 => 'The email field is required.',
-  ),
-  'password' => 
-  array (
-    0 => 'The password field is required.',
-  ),
)

Кажется, что JSON-утверждение находится в ответе.

1 Ответ

1 голос
/ 13 мая 2019

assertJson не будет работать в этом случае, так как данные, которые вы ищете, находятся под errors.

Вы можете обернуть ваш массив и ввести его с помощью "errors":

->assertJson([
    'errors' => [
        'email'    => ['The email field is required.'],
        'password' => ['The password field is required.'],
    ],
])

или вместо этого вы можете использовать assertJsonFragment , который попытается сопоставить любую часть json с тем, что вы указали:

->assertJsonFragment([
    'email' => ['The email field is required.'],
    'password' => ['The password field is required.'],
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...