tembra / pest-plugin-x-args
The Pest X-Args Plugin
Fund package maintenance!
tembra
Installs: 7
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/tembra/pest-plugin-x-args
Requires
- php: ^8.1
- pestphp/pest: ^2.5
- pestphp/pest-plugin: ^2.0.1
Requires (Dev)
README
This repository contains the Pest X-Args Plugin.
This plugin add to Pest the functionality to accept --x- arguments and access them from the test cases.
If you want to start testing your application with Pest, visit the main Pest Repository.
Installation
Install the plugin with Composer ».
composer require tembra/pest-plugin-x-args --dev
Versioning
This plugin is using Semantic Versioning »
- Major versions will always be the same as Pest
- v2.x works with Pest v2.x
Usage
Run Pest with any --x- argument you want to be available to test cases.
vendor/bin/pest --x-username=random --x-password=secret
If using a Composer script don't forget to use --, the special argument operator, after script name.
composer test-script-name -- --x-username=random --x-password=secret
In you test cases use the hasXArg() and getXArg() functions.
use function Tembra\Pest\Plugins\XArgs\{hasXArg}; use function Tembra\Pest\Plugins\XArgs\{getXArg}; it('has --x-username and --x-password argument', function () { $hasUsername = hasXArg('username'); $hasPassword = hasXArg('password'); expect($hasUsername)->toBe(true) ->and($hasPassword)->toBe(true); }); it('can login with valid credentials', function () { $username = getXArg('username'); $password = getXArg('password'); if (null === $username || null === $password) { $this->fail('You need to send valid username/password through command line.'); } // try to login with $username and $password // and make expectations and/or assertions with result });
About arguments
The arguments are firstly processed by Pest through Symfony\Component\Console\Input\Input and then sent to this and others plugins. So everything that works there should work here.
Right away this plugin identifies the --x- argument and then the first equal sign (=) to break the argument in two parts. Then it removes the --x- from the first part.
Some statements:
- Arguments have a
keyand avalue. - In argument
--x-test=truethe key istestand the value istrue. - Both
keyandvalueare always of typestring. - Arguments may have only a
keylike--x-active. When this is the case thevalueis an empty string. - Arguments
keyare case insensitive. - Arguments
keycan not have an equal sign (=). - Arguments
keymay use special chars if properly escaped, except the equal sign (=). - Arguments with the same
keyoverwrites each other. The last remains. - Arguments without a
keyare not made available (e.g.--x-=value). - Arguments
valuemay be between quotes (e.g.--x-key="complex value"). - Arguments
valuemay use special chars if properly escaped. - Unavailable arguments return
falseonhasXArg()andnullongetXArg()calls.
To check some crazy usages you may look at tests/PluginTest.php and even run it with Pest 🚀.
Motivation
Necessity to access specific and sensitive values (like a password) on test cases without the use of environment variables or files at all to do not take the risk to commit them to a local or remote code repository, even knowing that we could add these files to .gitignore.
Contributing
Have any questions, found bugs or want to discuss/implement new functionalities? Do not hesitate to post an Issue and/or make a Pull Request if you can.
More Pest
- Explore Pest docs at pestphp.com »
- Follow Pest on Twitter at @pestphp »
- Join Pest community at discord.gg/kaHY6p54JH » or t.me/+kYH5G4d5MV83ODk0 »
Pest is an open-sourced software licensed under the MIT license.