Using Laravel Orchid and PestPHP together
Table of contents
Foreword
I recently converted our Laravel codebase to use PestPHP as our testing framework. The decision is great so far. I come from the JavaScript world where we commonly write tests using Jest. The syntax of PestPHP and Jest are extremely similar. This is something that I enjoy. It makes it absolutely fast to write tests in PHP.
Problem
I use Laravel Orchid to power the user interface of our administrator dashboard. It is also a great piece of software. It even has a nice feature for creating test screens using their provided ScreenTesting
trait. I want to use this trait on my PestPHP tests. I want the trait to have complete type hints as well!
Solution
Luckily, PestPHP has this nice feature where you can write a custom helper function.
Just add the following code in your tests/Pest.php
file. Retrofit as needed:
<?php
use Orchid\Support\Testing\ScreenTesting;
use Orchid\Support\Testing\DynamicTestScreen;
uses(ScreenTesting::class)
->in('Feature/Orchid');
function screen(?string $name = null): DynamicTestScreen
{
return test()->screen($name);
}
In the example above, I make the ScreenTesting
trait available to my tests in the Feature/Orchid
folder. I define the actual helper function called screen
with appropriate type hints. Voila! it is readily made available to all my tests. It is that simple. We just bridged the two worlds together.
You can begin using the new helper function in a test, like so:
<?php
it('should show login screen', function () {
$screen = screen('platform.login');
$screen->display()
->assertSee('Login')
->assertSee('Sign in to your account');
});
Closing Thoughts
The test should pass. Congratulations! Now go write some more tests with your shiny new helper function.
PASS Tests\Feature\Orchid\Screens\LoginScreenTest
✓ it should show login screen
Tests: 1 passed
Time: 0.41s
I greatly admire the flexibility that PestPHP gives us. It was a nice developer experience to witness. As a developer myself, I aspire to deliver software that offers such flexibility and empowerment.
This is just a short blog post for today. Thanks for reading! 🥳
Subscribe to my newsletter
Read articles from Jose Gabrielle Rivera directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Jose Gabrielle Rivera
Jose Gabrielle Rivera
Back-end software developer with expertise in PHP, TypeScript, JavaScript, and Java development, as well as a passion for applying best practices in software architecture and design. Views are my own.