Asserting valid and invalid requests in Laravel original

by Brent Roose – 1 minute read

Testing a Laravel project is one of the most pleasant experiences I've ever had: there's a clean testing API, a very powerful layer added on top of testing frameworks; all while keeping the simplicity and eloquence you'd expect from a Laravel project.

Here's a great example of Laravel's powerful simplicity. Recently, an improved way to test whether a request has validation errors or not was added. You can now use assertValid and assertInvalid instead of assertSessionHasErrors or assertJsonValidationErrors:

public function test_post_validation()
{
    $this
        ->post(
            action(UpdatePostController::class),
            [
                'title' => null,
                'date' => '2021-01-01',
                'author' => 'Brent',
                'body' => null,
            ],
        )
        ->assertValid(['date', 'author'])
        ->assertInvalid(['title', 'body']);
}

It's even possible to check for specific validation errors:

public function test_post_validation()
{
    $this
        ->post(/* … */)
        ->assertInvalid([
            'title' => 'required',
            'body' => 'required',
        ]);
}

It's these kinds of little details that make testing a Laravel project so much fun!

If you want to up your testing game, check out our complete course about Testing Laravel. It teaches you how to test a Laravel application, from a beginner to master level.

Join 9,500+ smart developers

Get my monthly newsletter with what I learn from running Spatie, building Oh Dear, and maintaining 300+ open source packages. Practical takes on Laravel, PHP, and AI that you can actually use.

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

Found something interesting to share? Submit a link to the community section.