Как настроить тест для метода уничтожения Laravel 5.6

#php #laravel #laravel-5.6 #laravel-testing

#php #laravel #laravel-5.6 #laravel-тестирование

Вопрос:

Я прохожу тестирование своего приложения, и я дошел до того, что мне нужно протестировать метод уничтожения моего контроллера. Тест, который у меня есть на данный момент, является:

 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.
  

Что я должен сделать, чтобы тест выполнялся должным образом?

Ответ №1:

вы могли бы попробовать использовать 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)

Комментарии:

1. Я сменил свой контроллер с redirect()-> back на redirect()-> route и изменил тест на match, и теперь он проходит! Спасибо за совет!

Ответ №2:

Вы используете $response->assertSuccessful(); и перенаправляете пользователя, я имею в виду, что если ваш запрос на удаление будет успешным, он вернет 302 перенаправления, измените assertSuccessful() на assertStatus(302)