如何通过laravel路线进行单元测试?

时间:2017-05-25 09:48:27

标签: php unit-testing phpunit laravel-5.3

我的控制器中有以下代码

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区块

1 个答案:

答案 0 :(得分:0)

你可以传递一个空数组来输入,而create方法应该抛出QueryException

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

您还应该查看您的catch块返回。您将立即返回异常消息,永远不会调用带有消息的重定向。

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