Illuminate \ Validation \ ValidationException: данные неверны. Вызывается при попытке получить json из ответа во время тестирования

У меня есть следующий тест:

public function testStoreMemberValidation()
{
    $response = $this->withExceptionHandling()->post('/api/members', [
        "name" => "Eve",
        "age" => "invalid"
    ], ['X-Requested-With' => 'XMLHttpRequest']);

    dd($response->json());
};

Я пытаюсь утверждать, что ответ имеет форму ошибки проверки. Метод контроллера следующий:

public function store(Request $request)
{
    $data = $request->validate([
        'name' => 'required|string',
        'age' => 'required|integer',
    ]);

    Member::create($data);
}

Однако всякий раз, когда я вызываю какое-либо утверждение, которое вызывает $response->json() (а это большинство из них), я получаю исключение:

Illuminate \ Validation \ ValidationException: данные неверны.

Как я могу выполнить утверждения по этому ответу, не вызывая эту ошибку?

Обратите внимание, я использую Laravel 5.7.


person thodic    schedule 02.11.2018    source источник
comment
Laravel делает это по умолчанию, поэтому кажется, что где-то в конце строки (например, в базовом классе тестового примера или что-то в этом роде) вы добавили $this->withoutExceptionHandling.   -  person Martin Bean    schedule 02.11.2018
comment
Кроме того, вы можете использовать $this->postJson(), чтобы избежать добавления заголовка X-Requested-With вручную, и вы можете проверить наличие ошибок проверки с помощью $response->assertJsonValidationErrors('field_name').   -  person Martin Bean    schedule 02.11.2018
comment
Спасибо @MartinBean, изменение его на $this->postJson(), похоже, исправило его. Я почти уверен, что нигде не звонил $this->withoutExceptionHandling().   -  person thodic    schedule 02.11.2018


Ответы (1)


у вас есть withExceptionHandling() в вашем тесте, удалите его, и он должен работать.

$response = $this->withExceptionHandling()->post('/api/members', [
        "name" => "Eve",
        "age" => "invalid"
    ], ['X-Requested-With' => 'XMLHttpRequest']);

должно быть

$response = $this->post('/api/members', [
            "name" => "Eve",
            "age" => "invalid"
        ], ['X-Requested-With' => 'XMLHttpRequest']);
person Michael Nguyen    schedule 21.04.2019
comment
Также столкнулся с той же проблемой. Удаление withExceptionHandling устраняет ошибку. Есть ли в этом риск? Я чувствую, что в любом случае тест должен пройти. - person Damon; 05.02.2020