Laravel - Тестирование API с зависимостями данных - PullRequest
0 голосов
/ 29 января 2020

Я работаю над приложением Laravel с аутентификацией. Приложение также имеет API. Теперь я хочу протестировать все конечные точки API приложения. Проблема в том, что некоторым конечным точкам нужны данные в базе данных, чтобы «работать» с ними.

Как можно протестировать такое приложение? Нужно ли тестировать приложение в правильном порядке, чтобы архивировать что-то подобное?

Например:

  1. создать пользователя
  2. создать новое сообщение
  3. редактировать новое сообщение
  4. создать нового пользователя
  5. комментарий пользователя 1
  6. войдите с пользователем 1
  7. см. Комментарии к сообщению
  8. удалить сообщение

Или возможно имитировать подобные вещи, так что мне не нужен конкретный c порядок?

Я видел, что Laravel имеет встроенную проверку HTTP, но я не знаю, как обрабатывать зависимости данных. Спасибо за вашу помощь!

1 Ответ

1 голос
/ 29 января 2020

Вы можете определить Factory для создания ваших моделей. https://laravel.com/docs/5.8/database-testing#writing -заводы Например, в нашем проекте у нас много заводов. Они описывают, как создать модель. enter image description here

И позже в своем тестовом коде вы просто вызываете $partner = factory(Partner::class)->create() Для создания модели.

    public function testUpdate(): void
{
    /** @var Partner $partner */
    $partner = factory(Partner::class)->create();
    $name = 'Fake Partner';
    $description = 'Fake Partner Description';

    $response = $this->putJson('/partners/' . $partner->uuid, [
        'name' => $name,
        'description' => $description,
    ]);
}

Для выполнения действий через пользователя вы можете использовать пользователя actingAs($user)->get( https://laravel.com/docs/5.2/testing#sessions -и-аутентификация

Если вашему пользователю требуются любые другие ссылки на другие «сущности», вы можете создать их прямо в определении на своей фабрике пользователей.

$factory->define(User::class, static function (Faker $faker) {
    return [
        'organization_id' => factory(Organization::class),
        'name' => $faker->word,
        'description' => $faker->words(3, true),
    ];
});
...