Я использую Laravel Паспорт для создания API для моего Vue приложения. Я могу отправить запрос POST
через браузер и почтальон без каких-либо проблем.
Я (изучаю) написание модульных тестов и хотел бы проверить мой метод store
.
Здесь Вот как выглядит мой пример теста:
/** @test */
public function a_user_can_create_a_thing()
{
$this->withExceptionHandling();
$thing = factory(Thing::class)->raw();
$response = $this->post('api/v1/thing', $thing);
$response->assertStatus(200);
$this->assertDatabaseHas('things', $thing);
}
Контроллер. php
public function store(Request $request)
{
$attributes = request()->validate([
'foo' => 'nullable',
'bar' => 'required',
'baz' => 'required',
]);
$thing = Thing::create($attributes);
return response()->json(['data' => $thing], 200);
}
В данный момент я не проверяю / не устанавливаю какую-либо аутентификацию ( еще). Может быть, именно в этом я и ошибаюсь.
маршруты / API. php
Route::prefix('v1')->group(function () {
Route::post('thing', 'Api\v1\ThingController@store');
});
Если я использую dd($thing)
, я вижу, что все становится сгенерирован правильно, и мой контроллер получает все, как ожидалось.
Я получаю сообщение об ошибке:
Ожидаемый код состояния 200, но получено 500. Не удалось подтвердить, что значение false равно true.
В Почтальоне, если я отправлю POST
запрос на тот же контроллер: http://mysite.local/api/v1/thing
Все отлично работает.
Если я добавлю RefreshDatabase
мой тест проходит. Я не понимаю, почему.
Я посмотрел документы и добавил:
...
Passport::actingAsClient(
factory(Client::class)->create(),
['check-status']
);
...
Я получаю другие дополнительные ошибки, используя это. Я нашел пост на Laracasts , в котором предлагалось установить RefreshDatabase
. То, что делает , кажется, проходит тест, я не чувствую себя супер здорово.
Как я могу быть уверен, что мои тесты будут работать? Я чувствую, что это действительно базовый c тест. Спасибо за любые предложения!