Ошибка Laravel assertJson

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

$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 находится в ответе.

Какую версию Laravel вы используете?

Rwd 13.05.2019 13:16

Я использую Laravel 5.8.15. Я решаю с помощью assertJsonFragment

enfix 13.05.2019 13:32
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
2
1 328
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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.'],
])

Другие вопросы по теме