Reputation: 7105
I have store method in my controller like this
public function store()
{
request()->validate(['family'=>'required']);
User::create(request()->all());
return redirect('/users');
}
and test method like this
/** @test */
public function a_user_require_family()
{
$this->withoutExceptionHandling();
$this->post('/users', [])->assertSessionHasErrors('family');
}
It show me this:
1) Tests\Feature\UserTest::a_user_require_family
Illuminate\Validation\ValidationException: The given data was invalid.
Upvotes: 1
Views: 2394
Reputation: 11636
You are using assertSessionHasErrors('family')
which catches a ValidationException
on the key family
only if the key was passed in the request body and then failed your validation.
But in your case you are not passing the said key at all (You send an empty body []
).
You need to use assertSessionMissing()
in this case.
Try:
$this->post('/users', [])->assertSessionMissing('family');
Laravel Documentation : https://laravel.com/docs/5.8/http-tests#assert-session-missing
Upvotes: 3
Reputation: 2401
You cannot use $this->withoutExceptionHandling()
and also ->assertSessionHasErrors('family')
because all Validation errors are Exceptions which get handled by Illuminate\Validation\ValidationException
which you are expressly forbidding to run.
Simply remove $this->withoutExceptionHandling()
and your test should pass.
Upvotes: 7