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
我的控制器中有这样的存储方法
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