тест phpunit возвращает 302 для плохой проверки, почему бы не 422


У меня есть класс запроса, который не выполняет запрос post. Когда я вызываю его с помощью ajax, я получаю 422, потому что правила проверки не сработали. Но когда я использую phpunit для тестирования того же маршрута с теми же значениями, он возвращает 302.

Я также не получаю сообщений об ошибках, таких как "требуется поле foobar", только 302.

Итак, как я могу получить сообщения об ошибках, чтобы проверить, равны они или нет?

Вот мой тестовый код:

//post exam
$this->post('modul/foo/exam', [
    'date' => '2016-01-01'
])
    ->assertResponseStatus(200);

//post exam again
$this->post('modul/foo/exam', [
    'date' => '2016-01-01'
])
    ->assertResponseStatus(302); //need to get 422 with th errors because its an api
Author: mimo, 2016-01-27

1 answers

Когда проверка на FormRequest завершается неудачно, он проверяет, был ли запрос ajax или он принимает ответ json. Если это так, он вернет ответ json с кодом состояния 422. Если нет, он вернет перенаправление на указанный URL-адрес (предыдущий, по умолчанию). Итак, чтобы получить ответ на ошибку, которую вы ищете (422), вам нужно сделать запрос json или запрос ajax.

JSON

Чтобы сделать запрос json, вы должны использовать json() метод:

//post exam
$this->json('POST', 'modul/foo/exam', [
        'date' => '2016-01-01'
    ])
    ->assertResponseStatus(200);

//post exam again
$this->json('POST', 'modul/foo/exam', [
        'date' => 'some invalid date'
    ])
    ->assertResponseStatus(422);

АЯКС

Чтобы сделать запрос ajax, вам нужно добавить заголовки ajax. Для этого вы можете продолжать использовать метод post():

//post exam
$this->post(, 'modul/foo/exam', [
        'date' => '2016-01-01'
    ], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'])
    ->assertResponseStatus(200);

//post exam again
$this->post('modul/foo/exam', [
        'date' => 'some invalid date'
    ], ['HTTP_X_REQUESTED_WITH' => 'XMLHttpRequest'])
    ->assertResponseStatus(422);
 9
Author: patricus, 2016-01-27 09:47:25