2017-05-25 40 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塊了。我如何在單元測試中失敗我的路線?進入catch塊

回答

0

您可以傳遞一個空數組作爲輸入,create方法應該拋出QueryException

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

你也應該看看你的catch塊返回。您立即返回異常消息,帶消息的重定向永遠不會被調用。

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

對於空數組,我有formRequest驗證,因爲我已經寫了測試。我在創建方法中使用了Mockery拋出異常來失敗我的測試用例。感謝您的回覆 。 – user3125407