Как настроить тест для метода Destroy Laravel 5.6 - PullRequest
0 голосов
/ 07 марта 2019

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

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.

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

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

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

0 голосов
/ 07 марта 2019

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

...