我的控制器中有以下代码
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');
在我的代码覆盖率上,它显示我只覆盖了try块 我也想覆盖catch块。如何在单元测试中失败?进入catch区块
答案 0 :(得分:0)
你可以传递一个空数组来输入,而create方法应该抛出QueryException
。
$this->post('/specialities', []);
您还应该查看您的catch块返回。您将立即返回异常消息,永远不会调用带有消息的重定向。
return $e->getMessage();
return redirect()->route('specialities.index')
->with('error', 'Specialities details updating failed');