2016-12-03 2 views
1

/TDD를 테스트하려면 Laravel에서 유효성 검사를 어떻게 구성해야합니까?Laravel 검증, 테스트하는 방법/TDD?

컨트롤러에서 무언가를하는 대신 서비스에서 ValidationException을 던져서 단위 테스트에서이를 어설 션 할 수 있어야한다고 생각합니다. 예를 들어

나는 $password가 올바른지 내가 확인해야 UserService에서 changePassword($user, $password, $newPassword) 방법이 그 $newPassword

나는 여기 https://stackoverflow.com/a/23595760/964478 같이해야한다 등, 비어 있지? Validator::make 어딘가에

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

를 통해 그리고 단위로 검증을 만들기

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

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

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

을 테스트 또는 더 나은 방법이있다?

아니면 테스트를 거치지 않고 수용 테스트 (HTTP 응답, 세션 확인 ...)를 수행해야합니까?

+1

서비스 수준에서 확인 하시겠습니까? 컨트롤러에서 요청을 처리하고 있습니다. 이 서비스에서 어떤 이점이 있습니까? – jcorry

+0

@jcorry 어떻게 테스트합니까? 수락 테스트 레벨에서만 (POST 요청을 수행하고 응답/세션에서 오류를 확인하는 것과 같은)? 나는 단위 테스트에서 그것을하려고 노력했다. 또한 일부 서비스 방법은 여러 곳에서 사용될 수 있으므로 코드 중복을 피할 수 있다고 생각했습니다. – AlexP11223

+1

예, 컨트롤러 코드는 수락/통합 테스트에서 가장 잘 테스트됩니다. 이것이 바로 검증을 테스트 할 곳입니다. – jcorry

답변

-1

유효성 검사 개체를 조롱하고 모의 실험에서 실패한 유효성 검사에 대한 간단한 동작을 제공하고 해당 동작에 대해 주장 할 수 있습니다.

Mockery과 같은 도구를 사용하여 테스트에서 간단한 mock을 만들 수 있습니다.