Laravel 5.8 Illuminate\Validation\ValidationException: 给定的数据无效

Laravel 5.8 Illuminate\Validation\ValidationException: The given data was invalid

我的控制器中有这样的存储方法

public function store()
{
     request()->validate(['family'=>'required']);
     User::create(request()->all());
     return redirect('/users');
}

和这样的测试方法

/** @test */
public function a_user_require_family()
{
    $this->withoutExceptionHandling();
    $this->post('/users', [])->assertSessionHasErrors('family');
}

它告诉我这个:

1) Tests\Feature\UserTest::a_user_require_family
Illuminate\Validation\ValidationException: The given data was invalid.

您不能使用 $this->withoutExceptionHandling()->assertSessionHasErrors('family'),因为所有验证错误都是由 Illuminate\Validation\ValidationException 处理的异常,您明确禁止 运行.

只需删除 $this->withoutExceptionHandling(),您的测试就会通过。

您正在使用 assertSessionHasErrors('family'),只有当密钥在请求正文中传递然后您的验证失败时,它才会在密钥 family 上捕获 ValidationException

但在您的情况下,您根本没有传递上述密钥(您发送了一个空体 [])。

在这种情况下您需要使用 assertSessionMissing()

尝试:

$this->post('/users', [])->assertSessionMissing('family');

Laravel 文档 : https://laravel.com/docs/5.8/http-tests#assert-session-missing