January 12, 2024 · 4 min read · 492 views
We're excited to announce that we have updated all of our blog post examples to reflect the new Laravel 11 version! Our previous examples were based on Laravel 10, but with the release of Laravel 11, we wanted to ensure that our readers have access to the most up-to-date information and examples.
Testing is a crucial step in ensuring that your application works as expected and remains stable over time. Laravel, being a framework that embraces testing, provides excellent support for writing tests with PHPUnit, and has also seen growing support for PEST, a testing framework with a focus on simplicity and elegance. In this article, we'll explore how you can use PHPUnit and PEST to write tests for your Laravel app.
PHPUnit is the de facto standard for unit testing PHP applications. Laravel is built with testing in mind, and it includes out-of-the-box support for PHPUnit with a phpunit.xml
configuration file and some base test classes.
When you install Laravel, it comes with an example test file. To write a new test, you can create a file within the tests/Feature
or tests/Unit
directory, depending on the type of test you're writing. Here's an example of a feature test that checks if the blog posts index page is accessible:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class PostTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function posts_index_page_can_be_accessed()
{
$response = $this->get('/posts');
$response->assertStatus(200);
}
}
Or we can simplify it with this:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class PostTest extends TestCase
{
use RefreshDatabase;
/** @test */
public function posts_index_page_can_be_accessed()
{
$this->get('/posts')->assertStatus(200);
}
}
You can run your tests using the following command:
php artisan test
Laravel provides traits like RefreshDatabase
that you can use within your tests to reset your database after each test. This ensures that your tests are independent and won't affect each other.
Here's a test that ensures a new post can be created:
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
/** @test */
public function a_new_post_can_be_created()
{
$user = User::factory()->create(); // First we create a user
$postData = [
'title' => 'A New Post',
'content' => 'Content of the new post',
];
// This stimulates authentication when creating the new post
$this->actingAs($user)
->post('/posts', $postData);
$this->assertDatabaseHas('posts', [
'user_id' => $user->id,
'title' => 'A New Post',
'content' => 'Content of the new post',
]);
}
PEST is a testing framework that works on top of PHPUnit, offering a different approach with a focus on simplicity and a clean syntax. PEST allows you to write tests more expressively and elegantly.
To start using PEST in your Laravel blog, you'll need to create the test with the --pest
flag:
php artisan make:test UserTest --pest
After installing PEST, you can write more concise tests. Here's the same test we wrote with PHPUnit, now with PEST:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostTest extends TestCase
{
it('can access posts index page', function () {
$response = $this->get('/posts');
$response->assertStatus(200);
});
}
To run your PEST tests, you can use the same commands as for PHPUnit tests:
php artisan test
PEST supports all PHPUnit assertions, but it also provides additional features and helpers that make testing more enjoyable. For example, you can use higher-order tests to reduce boilerplate:
<?php
namespace Tests\Feature;
use Tests\TestCase;
class PostTest extends TestCase
{
it('can access posts index page')->get('/posts')->assertStatus(200);
}
Testing is an integral part of the development cycle, and Laravel provides robust tools to help you ensure that your blog functions correctly. Whether you prefer the familiarity of PHPUnit or the expressive syntax of PEST, Laravel has got you covered.
With PHPUnit, you have a powerful and well-established testing framework at your disposal. If you're looking for a more modern and elegant approach, PEST is an excellent choice that can make your tests even more readable and enjoyable to write.
This article is part of our series Laravel 11 for Beginners: A Step-by-Step Guide to Learn the Concepts.
If you need help with a Laravel project let's get in touch.
Lucky Media is proud to be recognized as a Top Laravel Development Agency
Technologies:
Related Posts
Stay up to date
Be updated with all news, products and tips we share!