2017-05-25 8 views
0

私は私のコントローラ内のコードを次している単体テスト用のlaravelルートに失敗する方法は?私のコードカバレッジで

public function store(CreateSpecialityRequest $request) 
{ 
    DB::beginTransaction(); 
    try { 
     $speciality = $this->specialityRepository->create($request->all()); 
     DB::commit(); 

     return redirect()->route('specialities.index') 
      ->with('success', 'Speciality Added successfully'); 
    } catch (\Exception $e) { 
     DB::rollBack(); 
     return $e->getMessage(); 
     return redirect()->route('specialities.index') 
      ->with('error', 'Specialities details updating failed'); 
    } 

} 

私のテストケース

$speciality = [ 
      'name' => $faker->name, 
      'description' => $faker->sentence, 
      'icon' => $uploadedFile 
     ]; 

     $this->post('/specialities', $speciality) 
      ->assertResponseStatus(302) 
      ->assertRedirectedToRoute('specialities.index') 
      ->assertSessionHas(['success' => 'Speciality Added successfully']) 
      ->followRedirects() 
      ->assertViewHas('specialities'); 

それは私が唯一の私があまりにもcatchブロックをカバーしたい を阻止しようとカバーしていることを示しています。ユニットテストで私のルートに失敗するにはどうすればいいですか?キャッチブロックに入る

答えて

0

空の配列を渡すだけで、作成メソッドはQueryExceptionをスローする必要があります。

$this->post('/specialities', []); 

また、キャッチブロックのリターンを確認する必要があります。すぐに例外メッセージが返されますが、メッセージ付きのリダイレクトは呼び出されません。

return $e->getMessage(); 
return redirect()->route('specialities.index') 
      ->with('error', 'Specialities details updating failed'); 
+0

空の配列の場合、私はすでにテストを書いているためにformRequestの検証をしています。テストケースを失敗させるために、作成メソッドでMockery throw例外を使用しました。返信ありがとう。 – user3125407

関連する問題