The HTTP Fixtures package for Laravel generates fake JSON responses for external API calls in tests using Laravel's Http::fake()
. It simplifies creating mock responses by integrating with FakerPHP to generate realistic test data.
Generating fake HTTP responses can be tedious, and this package makes it easy by creating a fixture from a real HTTP request in your test:
use Gromatics\Httpfixtures\Services\HttpResponseRecorder;use Illuminate\Support\Facades\Http; it('creates a 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();});
The above code will create a fixture in tests/Fixtures
, and the underlying data is defined using Faker in a fixture class you can reuse. You can also generate fixtures from a JSON file or via an Artisan command:
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(), ], ], // ... ], ];}
Finally, once you've created fixtures, you can use them in a test like the following example:
Http::fake(["https://api.stripe.com/v1/*" => Http::response( new StripeFixture()->toJson(), 200),]); // Override values using dot notationHttp::fake(["https://api.stripe.com/v1/*" => Http::response( new StripeFixture(['items.0.tags' => ["my-tag"]])->toJson(), 200),]);
Main Features
- Record fixture classes from live HTTP requests
- Create a fixture from a JSON file
- Create a new fixture via the package's Artisan command
- Control fixture output as JSON, XML, or an array
- Override specific keys using array dot notation
- And more...
You can learn more about this package, get full installation instructions, and view the source code on GitHub.