2016-12-03 21 views
1

/TDDをテストできるようにLaravelで検証をどのように構成する必要がありますか?Laravel検証、テスト方法/ TDD?

ユニットテストでアサートできるように、コントローラーで何かをする代わりにValidationExceptionをサービスから投げる必要があると思います。

例えば、私はなど私は$passwordが正しいことと$newPasswordが空でないことを確認する必要がありUserServicechangePassword($user, $password, $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

Validationオブジェクトをモックすることができます。モックでは、検証に失敗した場合の単純な動作を提供し、その動作に対してアサートすることができます。

Mockeryのようなツールを使用して、テストで単純なモックを作成できます。

関連する問題