Oh Dear is the all-in-one monitoring tool for your entire website. We monitor uptime, SSL certificates, broken links, scheduled tasks and more. You'll get a notifications for us when something's wrong. All that paired with a developer friendly API and kick-ass documentation. O, and you'll also be able to create a public status page under a minute. Start monitoring using our free trial now.

Faking HTTP requests in Laravel

Original – by Brent Roose – 2 minute read

Have you ever had to write an API integration from scratch? Where you're managing the HTTP calls yourself instead of being able to rely on third-party packages?

You might have used Guzzle to do so or, maybe better, Laravel's HTTP client.

If you're using the latter one, you'll be happy to know that the HTTP facade offers some great testing tools.

Imagine a repository class that can fetch RSS feeds from the web and parse them into a collection of structured data. Maybe something like this:

class RssRepository
{
    public function fetch(string $url)
    {
        $rss = Http::get($url)->body();

        return Rss::parse($rss)->map(
            fn (array $data)
                => RssEntry::fromArray($data)
        );
    }
}

Now, you definitely want to test whether your mapping logic works, but you don't want to send a real HTTP request every time you run your test. That's where the HTTP fake can help you:

Http::fake([
    'https://test.com/*'
        => Http::response($fakeRssBody),
]);

Notice the * wildcard in the URL? That's right! The HTTP fake is able to return different responses based on the URL and even supports wildcards! You could even choose to use one wildcard for all requests:

Http::fake([
    '*' => Http::response($fakeRssBody),
]);

There is a little more to tell about HTTP fakes, sequences for example; but we'll cover that in our Testing Laravel course.

Share Post LinkedIn

I write about Laravel, PHP, AI and building better software.

Every two weeks, I share practical tips, tutorials, and behind-the-scenes insights from maintaining 300+ open source packages. Join thousands of developers who read along.

No spam. Unsubscribe anytime. You can also follow me on X.

Found something interesting to share?

The community section is a place where developers share links to articles, tutorials and videos. Submit a link and help fellow developers discover great content. As a thank you, you'll receive a coupon for a discount on Spatie products.