Почему RefreshDatabase, кажется, требуется при модульном тестировании Laravel Passport? - PullRequest
1 голос
/ 05 февраля 2020

Я использую 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 тест. Спасибо за любые предложения!

...