Bugfix. The TestCase is now aware of if it is running in parallel or not 😎

This commit is contained in:
luke
2021-08-05 17:09:45 +01:00
parent 1ca9aa5ca6
commit 62aabc6ae1
4 changed files with 27 additions and 10 deletions

View File

@ -35,12 +35,21 @@ use Symfony\Component\Console\Output\OutputInterface;
$argv = new ArgvInput();
$testSuite = TestSuite::getInstance($rootPath, $argv->getParameterOption('--test-directory', 'tests'));
$shouldExecuteInParallel = $argv->hasParameterOption('--parallel');
// Let's remove the parallel option now we've retrieved its value
if (($parallelKey = array_search('--parallel', $_SERVER['argv'])) !== false) {
unset($_SERVER['argv'][$parallelKey]);
}
if ($argv->hasParameterOption('--isInParallel')) {
$testSuite->isInParallel = true;
}
// Let's remove the parallel flag now we've retrieved its value
if (($parallelKey = array_search('--isInParallel', $_SERVER['argv'])) !== false) {
unset($_SERVER['argv'][$parallelKey]);
}
$isDecorated = $argv->getParameterOption('--colors', 'always') !== 'never';
$output = new ConsoleOutput(ConsoleOutput::VERBOSITY_NORMAL, $isDecorated);

View File

@ -40,10 +40,11 @@ final class PestRunnerWorker
$args = array_merge(
$args,
$this->executableTest->commandArguments(
$this->getPestBinary(),
$this->getPestBinary($options),
$options->filtered(),
$options->passthru()
)
),
['--isInParallel'],
);
$this->process = new Process($args, $options->cwd(), $options->fillEnvWithTokens($token));
@ -109,15 +110,14 @@ final class PestRunnerWorker
}
}
private function getPestBinary(): string
private function getPestBinary(Options $options): string
{
// Used when Pest is required using composer.
$vendorPath = dirname(__DIR__, 7) . '/bin/pest';
$paths = [
implode(DIRECTORY_SEPARATOR, [$options->cwd(), 'bin', 'pest']),
implode(DIRECTORY_SEPARATOR, [$options->cwd(), 'vendor', 'bin', 'pest']),
];
// Used when Pest maintainers are running Pest tests.
$localPath = dirname(__DIR__, 3) . '/bin/pest';
return file_exists($vendorPath) ? $vendorPath : $localPath;
return file_exists($paths[0]) ? $paths[0] : $paths[1];
}
public function getWorkerCrashedException(?Throwable $previousException = null): WorkerCrashedException

View File

@ -73,6 +73,13 @@ final class TestSuite
*/
public $testPath;
/**
* Determines if this test is running in parallel.
*
* @var bool
*/
public $isInParallel = false;
/**
* Holds an instance of the test suite.
*

View File

@ -1,13 +1,14 @@
<?php
use Pest\Support\Str;
use Pest\TestSuite;
global $globalHook;
// HACK: we have to determine our $globalHook->calls baseline. This is because
// two other tests are executed before this one due to filename ordering.
$args = $_SERVER['argv'] ?? [];
$single = isset($args[1]) && Str::endsWith(__FILE__, $args[1]);
$single = isset($args[1]) && Str::endsWith(__FILE__, $args[1]) || TestSuite::getInstance()->isInParallel;
$offset = $single ? 0 : 2;
uses()->beforeAll(function () use ($globalHook, $offset) {