Chapter 2: Writing Unit Tests with PestPHP
In this chapter, we will delve into the world of unit testing using PestPHP, an elegant and enjoyable PHP testing framework. Unit testing is a crucial aspect of software development that involves testing individual components or units of code in isolation to ensure they function as expected. PestPHP provides a clean and expressive syntax for writing tests, making the process both efficient and enjoyable.
Getting Started with Unit Testing
Before we dive into writing tests, let's ensure that PestPHP is properly set up in our project. If you haven't done this yet, refer to Chapter 1: PestPHP Introduction Tutorial: A Step-by-Step Guide for Beginners.
Structuring Your Tests
PestPHP encourages a straightforward and organized directory structure for your tests. By default, it assumes that your test files reside in the tests
directory. Inside this directory, you can organize your tests based on the components they are testing.
For example :
Here, we've created a Unit
directory to house our unit tests. It's good practice to separate different types of tests, such as unit tests and feature tests, to maintain clarity in your project's test suite.
Writing Your First Unit Test
Now, let's write a simple unit test using PestPHP. In your EnumTest.php
file inside the tests/Unit
directory:
it('verify if enum returns correct value', function () {
$enum = UserStatusEnum::class;
expect($enum::ACTIVE->value)->toBe(1);
});
In this example, we've created a basic unit test using PestPHP's it
function. It is testing whether the value of the ACTIVE
enum from the UserStatusEnum
class is 1
.
Leveraging PestPHP's Assertions
PestPHP provides a variety of expressive assertions to validate the behavior of your code. Here are some examples:
<?php
it('can make assertions', function () {
// Check if a variable is true
expect(true)->toBeTrue();
// Check if a variable is false
expect(false)->toBeFalse();
// Check if a variable is null
expect(null)->toBeNull();
// Check if a variable is an instance of a class
expect($object)->toBeInstanceOf(SomeClass::class);
// Check if a string contains a specific substring
expect('Hello, World!')->toContain('Hello');
});
These assertions cover a wide range of scenarios and help ensure the correctness of your code. for more Architecture Testing | Pest - The elegant PHP Testing Framework (pestphp.com)
Running Your Tests
To execute your unit tests, run the following command in your terminal:
./vendor/bin/pest
PestPHP will automatically discover and execute your tests, providing clear and concise output.
Conclusion
In this chapter, we've explored the basics of writing unit tests with PestPHP. By structuring your tests logically and leveraging PestPHP's expressive syntax, you can create a robust suite of tests that validate the behavior of your code. As you continue your journey into unit testing, explore additional features provided by PestPHP and apply these principles to enhance the reliability of your software.
Subscribe to my newsletter
Read articles from Tresor Kasenda directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Tresor Kasenda
Tresor Kasenda
I've been a senior web developer for over seven years. I help build high-level web applications using technologies like PHP and Python. I love to share my knowledge with the community and help those who want to improve their skills in software development on technologies like Laravel, Livewire, AlpineJs, VueJs, and Django.