Learn to build well-tested applications from scratch.

Learn how to properly test your Laravel application at all levels and confidently ship them to the public.

Testing should not be hard.

Most tutorials use examples like summing or multiplying numbers, which isn't really useful in a real-world situation and might make you think testing is much harder than it actually is.

On this course, I'll teach you how to test a Laravel application from scratch, with detailed screencasts and a Git repository for you to check the progress at anytime.

We will build an uptime checker application, and you'll learn:

  • Why do we test?
  • What are tests made of?
  • Understanding factories, stubs and mocks
  • What we’ll be building
  • Setting up Laravel Jetstream
  • Structuring our models and factories
  • Setting up our sites and pings tables
  • Setting up our factories
  • Adding a site
  • Making sure only authenticated users can add sites
  • Adding a valid site
  • Validating the site is live
  • Converting our validation to a custom validation rule
  • Extracting validation logic to a request class
  • Notifying the user a new site was added
  • Making sure you can’t add the same site twice
  • Allowing users to enable or disable sites
  • Making sure we show active sites separately
  • Adding and testing query scopes
  • Notifying the team a site was disabled
  • Creating a job that pings a website and saves the result in the database
  • Sketching out our job test
  • Writing the logic that pings a website
  • Flagging sites
  • Flagging sites that fail twice in a row
  • Notifying the users once a site goes down
  • Notifying the users once a site comes back up
  • Making sure we don’t send a bunch of e-mails at once
  • Writing a job to check websites every minute
  • Going further
  • Analysing HTTP statuses and giving users suggestions
  • Saving response times
  • Sending a webhook once a check fails
  • Checking for certain HTML content on the website

Ship confidently.

Testing is much more than simply writing automated actions. It's allowing you to have confidence at all times during development.


  • 04:51

    00 - Concepts & Terms

  • 06:50

    01 - Setting Up Our Application

  • 08:15

    01 - Assertions And Test Examples

  • 12:37

    02 - Writing Our First Test

  • 01:51

    03 - Testing Authentication Is Required

  • 02:29

    04 - Testing Validation

  • 07:02

    05 - Testing Sites Have Valid URL Protocols

  • 04:03

    06 - Extracting Validation To A Request Class

  • 04:35

    07 - Visual Changes & Making Sure A Site Does Not Get Added Twice

  • 11:31

    07 - Sending Notifications

  • 10:15

    08 - Checking A Website

  • 00:31

    08 - Casting The Check Model Properties

  • 04:20

    09 - Calculating The Elapsed Time

  • 03:43

    10 - Faking The HTTP Client

  • 04:52

    11 - Testing All HTTP Failure Codes Using Data Providers

  • 01:18

    11 - Making Http Assertions

  • 10:28

    12 - Test Driving Bugs

  • 02:55

    13 - Limiting The Response Content

  • 04:21

    14 - Wrapping Things Up Writing Small, Important Tests

  • 03:34

    15 - Checking The Website As Soon As It Is Added

  • 05:59

    16 - Writing A Command To Check Every Website Every Single Minute

  • 07:12

    17 - Notifying The User Once Their Website Goes Down

  • 04:06

    18 - Notifying The User Once Their Site Comes Back Up

  • 03:17

    18 - Testing The SiteIsDown Notification Class

  • 07:20

    19 - Refactoring Combining Two Notifications Into One

  • 06:54

    20 - Accepting Webhook URLs On Sites

  • 07:20

    21 - Sending Webhooks Back

  • 13:51

    22 - Extracting The Webhook Code To Its Own Job

  • 03:27

    23 - Replacing The Webhook Call With A Job Dispatch

  • 01:52

    24 - Testing The Site

  • 08:13

    25 - Refactoring The CheckWebsite Test

  • 09:08

    26 - Making Sure We Can Filter Offline Sites

  • 09:44

    27 - Filtering Archived Sites

  • 10:34

    28 - Filtering Active Sites

  • 03:29

    29 - Setting Up Dusk

  • 11:57

    30 - Writing Our First Dusk Test


7-day no questions asked refund policy.

If you don't enjoy the course, it's fine — you'll be refunded.

Black Friday (40% OFF)


Get access to the lessons as they're released.

  • Lifetime access to all lessons as they're added

  • Access to the Slack workspace

  • Access to the Github repository

  • Ability to request new lessons



Get access to the finished, polished version of the course.

  • Lifetime access to all lessons

  • Access to the Slack workspace

  • Access to the Github repository

  • Ability to request new lessons

Who's teaching?

Hey! My name is Mateus Guimarães and I've been writing code for a few years now.

I've worked with several different types of clients, including companies in the telecommunications, marketing and SMS businesses.

I've also had my own company — a ticketing platform — which gave me a lot of experience writing robust, well-tested apps.

In my free time, I like to blog and I also have a YouTube channel with programming screencasts and general life/work videos.

You can also find me on Twitter, GitHub, LinkedIn and Instagram.

Frequently asked questions

Who is this course for?

This course is aimed at developers that already comfortable with Laravel and want to learn testing. If you're well-experienced with TDD, this course might not be worth it.
As a beginner, you'll learn how to actually write tests that keep you happy and your application stable.
As an intermediate developer that doesn't know much about testing, you'll learn some nice tricks and get more comfortable with Laravel's testing API.

Do you offer refunds?

Yes. You have 7 days to ask for a refund. No questions asked.

I don't know Laravel, should I buy this course?

Probably not. I suggest you learn the basics and then see if you're still interested in the course.

Why should I chosee this course over Laracasts?

If you have to choose between this course and Laracasts, I suggest you go with Laracasts.
This course is going to aggregate a lot to you, but on Laracasts you can learn about several other things.

Do you support purchasing power parity?

Yes! It is not available on the website yet, but you can send me an e-mail at [email protected] and I'll give you a 30% discount if you're from a country with a lower purchasing power.

I'm a student and I don't have enough money to buy this course. What can I do?

I want everybody to be able to purchase this course if they want it. Send me an email at [email protected] or reach out to me on Twitter and we'll figure things out!

Besides the screencasts, what do you get?

You get access to the Git repository and to a Slack workspace where you can chat with other members and solve your doubts.

Are there going to be additional lessons?

Definitely. The current table of contents is just a reference — I will surely add additional lessons for awhile, as long as topics come up.

Do you have any free content?

Sure I do. Check out my YouTube Channel.

© 2022 TDD with Laravel. All rights reserved.