Генерація HTTP-фікстур на основі реальних API-викликів у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 26 квітня, 2025
В рамках тестування вашого Laravel-додатку генерування фейкових HTTP-відповідей може здаватися нудним і трудомістким процесом. Досліджуйте, як пакет HTTP Fixtures спрощує цю задачу, генеруючи реалістичні відповіді з максимальною достовірністю за допомогою FakerPHP!

Пакет HTTP Fixtures для Laravel створює фейкові JSON-відповіді для зовнішніх API під час тестування за допомогою методу Http::fake(). Це значно спрощує процес створення мок-відповідей, інтегруючи FakerPHP для генерації реалістичних тестових даних.

Генерувати фейкові HTTP-відповіді може бути складно, але цей пакет робить це простим: ви можете створити фіктивну відповідь на основі реального HTTP-запиту у вашому тесті:

use Gromatics\Httpfixtures\Services\HttpResponseRecorder;
use Illuminate\Support\Facades\Http;
 
it('creates an HTTP Fixture from a real JSON request', function () {
    Http::record();
    Http::get('https://api.stackexchange.com/2.2/search?order=desc&sort=activity&intitle=perl&site=stackoverflow&limit=1');
    HttpResponseRecorder::recordedToHttpFixture();
});

Вищенаведений код створить фікцію у директорії tests/Fixtures, а дані налаштуються за допомогою Faker у класі фікції, який можна повторно використовувати. Також доступна можливість створювати фікції з JSON-файлу або через команду Artisan:

public function definition(): array
{
    return [
        'items' => [
            0 => [
                'tags' => [
                    0 => $this->faker->word(),
                    1 => $this->faker->word(),
                    2 => $this->faker->word(),
                ],
                'owner' => [
                    'reputation' => $this->faker->numberBetween(10, 99),
                    'user_id' => $this->faker->numberBetween(1000000, 9999999),
                    'user_type' => $this->faker->word(),
                    'profile_image' => $this->faker->word(),
                    'display_name' => $this->faker->name(),
                    'link' => $this->faker->url(),
                ],
            ],
            // ...
        ],
    ];
}

Після того як ви створите фікції, їх можна використовувати у тестах, наприклад:

Http::fake(["https://api.stripe.com/v1/*" => Http::response(
    new StripeFixture()->toJson(),  200),
]);
 
// Перезапишіть значення за допомогою нотації з крапками
Http::fake(["https://api.stripe.com/v1/*" => Http::response(
    new StripeFixture(['items.0.tags' => ["my-tag"]])->toJson(),  200),
]);

# Основні функції

Детальніше про цей пакет, інструкції щодо встановлення та джерела коду можна знайти на GitHub.