Как правильно тестировать api?

Есть api для постов. Реализован resource контроллер (CRUD)
Как правильно сделать тестирование этого контроллера?

Ну вот к примеру у меня в методе index

$data = Post::all();
return PostResource::collection($data);

роут к нему test.com/api/post
Как протестировать эту ссылку?

Просто не до конца понимаю нужно ли базу привязывать сюда или нет, или делать тестовую базу?
  • Вопрос задан
  • 1176 просмотров
Решения вопроса 1
В данном случае я обычно использую тестовую sqlite in memory базу, в phpunit.xml добавив:

<env name="DB_CONNECTION" value="sqlite"/>
<env name="DB_DATABASE" value=":memory:"/>


После в тесте всегда сбрасывать и накатывать данные в БД при каждом запуске:

use RefreshDatabase;

Дальше используя фабрики создаем записи в тестовой БД. Как пример:

$task = factory(\App\Task::class)->create([
     'archive' => false
]);


Отправляем запрос на наш URL (у Вас это будет /api/post). Опять таки для примера:

$response = $this->get('/current_tasks');

И в результате проверяем нужные данные, например, что ответ от сервера пришел со статусом 200 и что результатом должен быть ответ в формате JSON и именно те данные, которые мы ранее поместили в тестовую БД:

$response->assertStatus(200)
          ->assertJson([$task->toArray()]);


Здесь подробнее посмотрите про все ассерты: https://laravel.com/docs/5.6/http-tests
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы