如何为 Destroy 方法设置测试 Laravel 5.6
How to Set Up a Test for the Destroy Method Laravel 5.6
我正在对我的应用程序进行测试,我已经到了需要测试我的控制器的 destroy 方法的地步。我目前的测试是:
public function test_user_can_delete_draft()
{
$user = factory(User::class)->states('confirmed', 'normaluser')->create();
$userForm = factory(Form::class)->states('in_house_signs')->create(['user_id' => $user->id, 'status' => 'draft',]);
// Test creator can delete form
$response = $this->actingAs($user)->delete(route('forms.destroy', $userForm));
$response->assertSuccessful();
}
我正在测试的控制器中的方法是:
public function destroy($id) {
$form = Form::find($id);
Comment::where('form_id', $id)->delete();
$form->delete();
// Redirect
return redirect()->back()->with('status', 'Form successfully deleted');
}
当我 运行 phpunit 时,我得到错误:
Response status code [302] is not a successful status code.
Failed asserting that false is true.
我应该怎么做才能使测试正确地达到 运行?
你可以尝试使用 assertRedirect
https://laravel.com/docs/5.6/http-tests#assert-redirect
或使用状态检查:
$response->assertStatus(302)
https://laravel.com/docs/5.6/http-tests#assert-status
或者如果你真的想检查记录是否被删除,你可以在测试中检查数据库是否记录被删除$this->assertEquals(Comment::where('form_id', $userForm->id)->first(),null)
您正在使用 $response->assertSuccessful();
并重定向用户,我的意思是如果您的删除请求成功,它将 return 302 重定向,将 assertSuccessful()
更改为 assertStatus(302)
我正在对我的应用程序进行测试,我已经到了需要测试我的控制器的 destroy 方法的地步。我目前的测试是:
public function test_user_can_delete_draft()
{
$user = factory(User::class)->states('confirmed', 'normaluser')->create();
$userForm = factory(Form::class)->states('in_house_signs')->create(['user_id' => $user->id, 'status' => 'draft',]);
// Test creator can delete form
$response = $this->actingAs($user)->delete(route('forms.destroy', $userForm));
$response->assertSuccessful();
}
我正在测试的控制器中的方法是:
public function destroy($id) {
$form = Form::find($id);
Comment::where('form_id', $id)->delete();
$form->delete();
// Redirect
return redirect()->back()->with('status', 'Form successfully deleted');
}
当我 运行 phpunit 时,我得到错误:
Response status code [302] is not a successful status code.
Failed asserting that false is true.
我应该怎么做才能使测试正确地达到 运行?
你可以尝试使用 assertRedirect
https://laravel.com/docs/5.6/http-tests#assert-redirect
或使用状态检查:
$response->assertStatus(302)
https://laravel.com/docs/5.6/http-tests#assert-status
或者如果你真的想检查记录是否被删除,你可以在测试中检查数据库是否记录被删除$this->assertEquals(Comment::where('form_id', $userForm->id)->first(),null)
您正在使用 $response->assertSuccessful();
并重定向用户,我的意思是如果您的删除请求成功,它将 return 302 重定向,将 assertSuccessful()
更改为 assertStatus(302)