mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
feat: --bail
This commit is contained in:
@ -83,6 +83,7 @@
|
||||
"extra": {
|
||||
"pest": {
|
||||
"plugins": [
|
||||
"Pest\\Plugins\\Bail",
|
||||
"Pest\\Plugins\\Cache",
|
||||
"Pest\\Plugins\\Coverage",
|
||||
"Pest\\Plugins\\Init",
|
||||
|
||||
@ -23,8 +23,9 @@ final class BootSubscribers implements Bootstrapper
|
||||
private const SUBSCRIBERS = [
|
||||
Subscribers\EnsureConfigurationIsValid::class,
|
||||
Subscribers\EnsureConfigurationIsAvailable::class,
|
||||
Subscribers\EnsureTeamCityEnabled::class,
|
||||
Subscribers\EnsureIgnorableTestCasesAreIgnored::class,
|
||||
Subscribers\EnsureKernelDumpIsFlushed::class,
|
||||
Subscribers\EnsureTeamCityEnabled::class,
|
||||
];
|
||||
|
||||
/**
|
||||
|
||||
30
src/Plugins/Bail.php
Normal file
30
src/Plugins/Bail.php
Normal file
@ -0,0 +1,30 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Plugins;
|
||||
|
||||
use Pest\Contracts\Plugins\HandlesArguments;
|
||||
use Pest\Plugins\Concerns\HandleArguments;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class Bail implements HandlesArguments
|
||||
{
|
||||
use HandleArguments;
|
||||
|
||||
/**
|
||||
* Handles the arguments, adding the `--stop-on-defect` when the `--bail` argument is present.
|
||||
*/
|
||||
public function handleArguments(array $arguments): array
|
||||
{
|
||||
if ($this->hasArgument('--bail', $arguments)) {
|
||||
$arguments = $this->popArgument('--bail', $arguments);
|
||||
|
||||
$arguments = $this->pushArgument('--stop-on-defect', $arguments);
|
||||
}
|
||||
|
||||
return $arguments;
|
||||
}
|
||||
}
|
||||
@ -58,6 +58,8 @@ final class Help implements HandlesArguments
|
||||
'desc' => $description,
|
||||
] = $option;
|
||||
|
||||
assert(is_string($argument));
|
||||
|
||||
View::render('components.two-column-detail', [
|
||||
'left' => $this->colorizeOptions($argument),
|
||||
'right' => preg_replace(['/</', '/>/'], ['[', ']'], $description),
|
||||
@ -78,7 +80,7 @@ final class Help implements HandlesArguments
|
||||
*/
|
||||
private function colorizeOptions(string $argument): string
|
||||
{
|
||||
return preg_replace(
|
||||
return (string) preg_replace(
|
||||
['/</', '/>/', '/(-+[\w-]+)/'],
|
||||
['[', ']', '<fg=blue;options=bold>$1</>'],
|
||||
$argument
|
||||
@ -95,12 +97,12 @@ final class Help implements HandlesArguments
|
||||
/** @var array<string, array<int, array{arg: string, desc: string}>> $content */
|
||||
$content = $helpReflection->getConstant('HELP_TEXT');
|
||||
|
||||
$content['Configuration'] = [[
|
||||
$content['Configuration'] = [...[[
|
||||
'arg' => '--init',
|
||||
'desc' => 'Initialise a standard Pest configuration',
|
||||
], $content['Configuration']];
|
||||
]], ...$content['Configuration']];
|
||||
|
||||
$content['Selection'] = [
|
||||
$content['Selection'] = array_merge([
|
||||
[
|
||||
'arg' => '--todos',
|
||||
'desc' => 'Output to standard output the list of todos',
|
||||
@ -109,7 +111,7 @@ final class Help implements HandlesArguments
|
||||
'arg' => '--retry',
|
||||
'desc' => 'Run non-passing tests first and stop execution upon first error or failure',
|
||||
],
|
||||
] + $content['Selection'];
|
||||
], $content['Selection']);
|
||||
|
||||
$content['Reporting'] = [...$content['Reporting'], ...[
|
||||
[
|
||||
|
||||
42
src/Subscribers/EnsureIgnorableTestCasesAreIgnored.php
Normal file
42
src/Subscribers/EnsureIgnorableTestCasesAreIgnored.php
Normal file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Pest\Subscribers;
|
||||
|
||||
use PHPUnit\Event\TestRunner\Started;
|
||||
use PHPUnit\Event\TestRunner\StartedSubscriber;
|
||||
use PHPUnit\Event\TestRunner\WarningTriggered;
|
||||
use PHPUnit\TestRunner\TestResult\Collector;
|
||||
use PHPUnit\TestRunner\TestResult\Facade;
|
||||
use ReflectionClass;
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
final class EnsureIgnorableTestCasesAreIgnored implements StartedSubscriber
|
||||
{
|
||||
/**
|
||||
* Runs the subscriber.
|
||||
*/
|
||||
public function notify(Started $event): void
|
||||
{
|
||||
$reflection = new ReflectionClass(Facade::class);
|
||||
$property = $reflection->getProperty('collector');
|
||||
$property->setAccessible(true);
|
||||
$collector = $property->getValue();
|
||||
|
||||
assert($collector instanceof Collector);
|
||||
|
||||
$reflection = new ReflectionClass($collector);
|
||||
$property = $reflection->getProperty('testRunnerTriggeredWarningEvents');
|
||||
$property->setAccessible(true);
|
||||
|
||||
/** @var array<int, WarningTriggered> $testRunnerTriggeredWarningEvents */
|
||||
$testRunnerTriggeredWarningEvents = $property->getValue($collector);
|
||||
|
||||
$testRunnerTriggeredWarningEvents = array_values(array_filter($testRunnerTriggeredWarningEvents, fn (WarningTriggered $event): bool => $event->message() !== 'No tests found in class "Pest\TestCases\IgnorableTestCase".'));
|
||||
|
||||
$property->setValue($collector, $testRunnerTriggeredWarningEvents);
|
||||
}
|
||||
}
|
||||
@ -5,28 +5,31 @@
|
||||
|
||||
CONFIGURATION OPTIONS:
|
||||
--init ............................ Initialise a standard Pest configuration
|
||||
-c|--configuration <file> ....................... Read configuration from XML file
|
||||
--bootstrap [file] ...... A PHP script that is included before the tests run
|
||||
-c|--configuration [file] ................. Read configuration from XML file
|
||||
--no-configuration ......... Ignore default configuration file (phpunit.xml)
|
||||
--no-extensions ............................. Do not load PHPUnit extensions
|
||||
--include-path <path(s)> ..... Prepend PHP's include_path with given path(s)
|
||||
-d <key[=value]> ...................................... Sets a php.ini value
|
||||
--cache-directory <dir> ................................. Specify cache directory
|
||||
--include-path [path(s)] ..... Prepend PHP's include_path with given path(s)
|
||||
-d [key[=value]] ...................................... Sets a php.ini value
|
||||
--cache-directory [dir] ............................ Specify cache directory
|
||||
--generate-configuration Generate configuration file with suggested settings
|
||||
--migrate-configuration ....... Migrate configuration file to current format
|
||||
|
||||
SELECTION OPTIONS:
|
||||
--todos ........................ Output to standard output the list of todos
|
||||
--retry Run non-passing tests first and stop execution upon first error or failure
|
||||
--exclude-testsuite <name> ........ Exclude tests from the specified test suite(s)
|
||||
--list-suites ................................... List available test suites
|
||||
--testsuite [name] ......... Only run tests from the specified test suite(s)
|
||||
--exclude-testsuite [name] .. Exclude tests from the specified test suite(s)
|
||||
--list-groups ................................... List available test groups
|
||||
--group <name> ........................ Only run tests from the specified group(s)
|
||||
--exclude-group <name> ................. Exclude tests from the specified group(s)
|
||||
--covers <name> ............................. Only run tests that intend to cover <name>
|
||||
--uses <name> ................................. Only run tests that intend to use <name>
|
||||
--group [name] .................. Only run tests from the specified group(s)
|
||||
--exclude-group [name] ........... Exclude tests from the specified group(s)
|
||||
--covers [name] ................. Only run tests that intend to cover [name]
|
||||
--uses [name] ..................... Only run tests that intend to use [name]
|
||||
--list-tests .......................................... List available tests
|
||||
--list-tests-xml <file> ....................... List available tests in XML format
|
||||
--filter <pattern> ........................................ Filter which tests to run
|
||||
--test-suffix <suffixes> Only search for test in files with specified suffix(es). Default: Test.php,.phpt
|
||||
--list-tests-xml [file] ................. List available tests in XML format
|
||||
--filter [pattern] ............................... Filter which tests to run
|
||||
--test-suffix [suffixes] Only search for test in files with specified suffix(es). Default: Test.php,.phpt
|
||||
|
||||
EXECUTION OPTIONS:
|
||||
--process-isolation ................ Run each test in a separate PHP process
|
||||
@ -36,7 +39,7 @@
|
||||
--strict-global-state .............. Be strict about changes to global state
|
||||
--disallow-test-output ................. Be strict about output during tests
|
||||
--enforce-time-limit ................. Enforce time limit based on test size
|
||||
--default-time-limit <sec> Timeout in seconds for tests that have no declared size
|
||||
--default-time-limit [sec] Timeout in seconds for tests that have no declared size
|
||||
--dont-report-useless-tests .. Do not report tests that do not test anything
|
||||
--stop-on-defect ................. Stop execution upon first not-passed test
|
||||
--stop-on-error ............................ Stop execution upon first error
|
||||
@ -51,12 +54,12 @@
|
||||
--fail-on-warning .................... Treat tests with warnings as failures
|
||||
--cache-result ............................ Write test results to cache file
|
||||
--do-not-cache-result .............. Do not write test results to cache file
|
||||
--order-by <order> Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size
|
||||
--random-order-seed <N> Use the specified random seed when running tests in random order
|
||||
--order-by [order] Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size
|
||||
--random-order-seed [N] Use the specified random seed when running tests in random order
|
||||
|
||||
REPORTING OPTIONS:
|
||||
--colors <flag> ............... Use colors in output ("never", "auto" or "always")
|
||||
--columns <n> .................... Number of columns to use for progress output
|
||||
--colors [flag] ......... Use colors in output ("never", "auto" or "always")
|
||||
--columns [n] ................. Number of columns to use for progress output
|
||||
--columns max ............ Use maximum number of columns for progress output
|
||||
--stderr ................................. Write to STDERR instead of STDOUT
|
||||
--no-progress .................... Disable output of test execution progress
|
||||
@ -71,26 +74,29 @@
|
||||
--reverse-list .............................. Print defects in reverse order
|
||||
--teamcity . Replace default progress and result output with TeamCity format
|
||||
--testdox ................ Replace default result output with TestDox format
|
||||
--compact ................ Replace default result output with Compact format
|
||||
|
||||
LOGGING OPTIONS:
|
||||
--log-junit <file> ................ Write test results in JUnit XML format to file
|
||||
--log-teamcity <file> .............. Write test results in TeamCity format to file
|
||||
--testdox-html <file> ........ Write test results in TestDox format (HTML) to file
|
||||
--testdox-text <file> .. Write test results in TestDox format (plain text) to file
|
||||
--log-events-text <file> ..................... Stream events as plain text to file
|
||||
--log-events-verbose-text <file> Stream events as plain text (with telemetry information) to file
|
||||
--log-junit [file] .......... Write test results in JUnit XML format to file
|
||||
--log-teamcity [file] ........ Write test results in TeamCity format to file
|
||||
--testdox-html [file] .. Write test results in TestDox format (HTML) to file
|
||||
--testdox-text [file] Write test results in TestDox format (plain text) to file
|
||||
--log-events-text [file] ............... Stream events as plain text to file
|
||||
--log-events-verbose-text [file] Stream events as plain text (with telemetry information) to file
|
||||
--no-logging ....... Ignore logging configured in the XML configuration file
|
||||
|
||||
CODE COVERAGE OPTIONS:
|
||||
--coverage ..... Generate code coverage report and output to standard output
|
||||
--coverage --min Set the minimum required coverage percentage, and fail if not met
|
||||
--coverage-crap4j <file> . Write code coverage report in Crap4J XML format to file
|
||||
--coverage-html <dir> .... Write code coverage report in HTML format to directory
|
||||
--coverage-php <file> ................ Write serialized code coverage data to file
|
||||
--coverage-text=<file> Write code coverage report in text format to file [default: standard output]
|
||||
--coverage-xml <dir> ...... Write code coverage report in XML format to directory
|
||||
--coverage-clover [file] Write code coverage report in Clover XML format to file
|
||||
--coverage-cobertura [file] Write code coverage report in Cobertura XML format to file
|
||||
--coverage-crap4j [file] Write code coverage report in Crap4J XML format to file
|
||||
--coverage-html [dir] Write code coverage report in HTML format to directory
|
||||
--coverage-php [file] .......... Write serialized code coverage data to file
|
||||
--coverage-text=[file] Write code coverage report in text format to file [default: standard output]
|
||||
--coverage-xml [dir] . Write code coverage report in XML format to directory
|
||||
--warm-coverage-cache ........................... Warm static analysis cache
|
||||
--coverage-filter <dir> ..................... Include <dir> in code coverage reporting
|
||||
--coverage-filter [dir] ........... Include [dir] in code coverage reporting
|
||||
--path-coverage .......... Report path coverage in addition to line coverage
|
||||
--disable-coverage-ignore ...... Disable metadata for ignoring code coverage
|
||||
--no-coverage Ignore code coverage reporting configured in the XML configuration file
|
||||
|
||||
Reference in New Issue
Block a user