Laravel验证,如何测试/ TDD?

How should I organize validation in Laravel to be able to test/TDD?

I think I need to throw ValidationException from services instead of doing something in controllers, to be able to assert it in unit tests.

For example I have changePassword($user, $password, $newPassword) method in UserService where I need to check that $password is correct and that $newPassword is not empty, etc.

Should I do it like here https://stackoverflow.com/a/23595760/964478? Create a validator via Validator::make somewhere and

if ($validator->fails())
{
    throw new ValidationException($validator);
}

And in unit tests

public function should_not_change_password_if_incorrect_current_password()
{
    $user = ......;

    $this->expectException(ValidationException::class);

    $this->userService->changePassword($user, 'incorrect', 'newPassword');
}

Or there are better ways?

Or I should not unit test it and just do acceptance testing (checking HTTP response, session, ...)?

You may wish to mock the Validation object, and in your mock you can provide simple behavior for a failed validation and assert against that behaviour.

You could use a tool like Mockery to create simple mocks in your tests.