Brainstorm Tests With PEST Todos 🔥
Published on by Paul Redmond
The @laracasts Twitter account shared a fantastic tip for brainstorming your tests with Pest PHP:
I love how easy it is to brainstorm functionality with @pestphp. Just add a call to ->todo() after your test name.
— Laracasts (@laracasts) May 9, 2023
And then create a "todo" code snippet to speed things up and stay in the flow. pic.twitter.com/42EqPKlHrv
I love how a Pest test file feels like a scratch pad, and you can quickly riff on ideas as you think of them quickly. The less friction between the idea and test scaffolding, the better!
Take the default feature ExampleTest.php
file in a Laravel project using Pest, for example:
it('returns a successful response', function () { $response = $this->get('/'); $response->assertStatus(200);}); it('requires a valid email')->todo();it('detects Gmail addresses with a "+" as a non-unique email.')->todo();it('requires a strong password')->todo();
When you run the pest
CLI, you'll get helpful todo's that you can start to work on as you code:
Better yet, as mentioned in the tip, use the --dirty
flag to only run the modified tests:
What if you are using PHPUnit class-based tests?
If you were to write something similar in a PHPUnit class-based test, it would take much more boilerplate:
namespace Tests\Feature; use Tests\TestCase; class ExampleTest extends TestCase{ /** * A basic test example. */ public function test_the_application_returns_a_successful_response(): void { $response = $this->get('/'); $response->assertStatus(200); } /** @test */ public function it_requires_a_valid_email() { $this->markTestIncomplete('requires a valid email'); } /** @test */ public function it_detects_gmail_address_with_a_plus_as_non_unique() { $this->markTestIncomplete('detects Gmail addresses with a "+" as a non-unique email.'); } /** @test */ public function it_requires_a_strong_password() { $this->markTestIncomplete('requires a strong password'); }}
If we run the PHPUnit version, we don't get much output:
$ phpunit ..III 5 / 5 (100%) OK, but there are issues!Tests: 5, Assertions: 2, Incomplete: 3.
Thankfully, if you are using PHPUnit with class-based tests, you can at least use artisan test
to get Laravel's formatter:
Thanks to @laracasts for the 🔥 tip!