A bash function to run tests for both PHPUnit and Pest
I've used this little bash alias for many years to quickly run the tests inside of a project.
alias p="vendor/bin/phpunit"
With this alias in place, I can run the tests by typing "p" on the CLI. Nice!
For a long time, everything was great! But then, Pest appeared on the scene. It's an alternative test runner for PHP with a high focus on developer experience.
If you want to know more about Pest, check out the official documentation or the video course that I made on it.
To execute Pest, I introduced another bash alias.
alias pest="vendor/bin/pest"
But having separate commands for PHPUnit and Pest is a bit cumbersome. I often switch projects, and with two testing commands, I have to think if I should use p
or pest
to run the tests.
Because I didn't want to think about this (and because my muscle memory always let me type "p"), I've now replaced these two aliases with a single Bash function.
function p() {
if [ -f vendor/bin/pest ]; then
vendor/bin/pest "$@"
else
vendor/bin/phpunit "$@"
fi
}
With this function, I can type "p" in the terminal to run the tests of the project where I'm currently on. The function will pick the right test runner for me. Sweet!
Because I often use the --filter
flag to run a single test, I've also added this pf
function.
function pf() {
if [ -f vendor/bin/pest ]; then
vendor/bin/pest --filter "$@"
else
vendor/bin/phpunit --filter "$@"
fi
}
Both the p
and pf
functions can be found in my dotfiles repository. You'll find all settings that I use on the CLI in that repository. If you want to use the same settings as me, look at the readme in the repo to learn how to use them.
What are your thoughts on "A bash function to run tests for both PHPUnit and Pest"?