mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
Compare commits
20 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ae061d208 | |||
| 3d7e621b7d | |||
| bf14c4262a | |||
| b186d7a4ee | |||
| e109cd1da2 | |||
| 473f295b77 | |||
| 5df46d03c3 | |||
| 19424ae06d | |||
| 6c8970e0a3 | |||
| 2f2b51ce3d | |||
| 33f596bcce | |||
| 50a96dcb8f | |||
| d9a4fa33b9 | |||
| 1c673fcff9 | |||
| ff82596158 | |||
| 0539d2ba62 | |||
| 1915ad368a | |||
| a4833bbfe4 | |||
| 7433cc5565 | |||
| 4c769fac66 |
1
.github/workflows/integration-tests.yml
vendored
1
.github/workflows/integration-tests.yml
vendored
@ -8,6 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
|
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
|||||||
1
.github/workflows/static.yml
vendored
1
.github/workflows/static.yml
vendored
@ -8,6 +8,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
static:
|
static:
|
||||||
|
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
|
||||||
name: Static Tests
|
name: Static Tests
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|||||||
1
.github/workflows/tests.yml
vendored
1
.github/workflows/tests.yml
vendored
@ -9,6 +9,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
ci:
|
ci:
|
||||||
|
if: github.event_name != 'schedule' || github.repository == 'pestphp/pest'
|
||||||
runs-on: ${{ matrix.os }}
|
runs-on: ${{ matrix.os }}
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
|||||||
18
CHANGELOG.md
18
CHANGELOG.md
@ -2,6 +2,24 @@
|
|||||||
|
|
||||||
## Unreleased
|
## Unreleased
|
||||||
|
|
||||||
|
## [v2.3.0 (2023-03-28)](https://github.com/pestphp/pest/compare/v2.2.3...v2.3.0)
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Better error handler about missing uses ([#743](https://github.com/pestphp/pest/pull/743))
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Inconsistent spelling of `dataset` ([#739](https://github.com/pestphp/pest/pull/739))
|
||||||
|
|
||||||
|
### Chore
|
||||||
|
- Bumps PHPUnit to `^10.0.19` ([3d7e621](https://github.com/pestphp/pest/commit/3d7e621b7dfc03f0b2d9dcf6eb06c26bc383f502))
|
||||||
|
|
||||||
|
## [v2.2.3 (2023-03-24)](https://github.com/pestphp/pest/compare/v2.2.2...v2.2.3)
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- Unnecessary dataset on dataset arguments missmatch ([#736](https://github.com/pestphp/pest/pull/736))
|
||||||
|
- Parallel arguments on plugins order ([#703](https://github.com/pestphp/pest/pull/703))
|
||||||
|
- Arch plugin runtime exceptions on bad phpdocs ([2f2b51c](https://github.com/pestphp/pest/commit/2f2b51ce3d1b000be9d6add0e785fd0044931b3b))
|
||||||
|
|
||||||
## [v2.2.2 (2023-03-23)](https://github.com/pestphp/pest/compare/v2.2.1...v2.2.2)
|
## [v2.2.2 (2023-03-23)](https://github.com/pestphp/pest/compare/v2.2.1...v2.2.2)
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|||||||
@ -21,13 +21,13 @@
|
|||||||
"brianium/paratest": "^7.1.2",
|
"brianium/paratest": "^7.1.2",
|
||||||
"nunomaduro/collision": "^7.3.3",
|
"nunomaduro/collision": "^7.3.3",
|
||||||
"nunomaduro/termwind": "^1.15.1",
|
"nunomaduro/termwind": "^1.15.1",
|
||||||
"pestphp/pest-plugin": "^2.0.0",
|
"pestphp/pest-plugin": "^2.0.1",
|
||||||
"pestphp/pest-plugin-arch": "^2.0.1",
|
"pestphp/pest-plugin-arch": "^2.0.2",
|
||||||
"phpunit/phpunit": "^10.0.18"
|
"phpunit/phpunit": "^10.0.19"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"webmozart/assert": "<1.11.0",
|
"webmozart/assert": "<1.11.0",
|
||||||
"phpunit/phpunit": ">10.0.18"
|
"phpunit/phpunit": ">10.0.19"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
|
|||||||
@ -2,7 +2,7 @@ ARG PHP=8.1
|
|||||||
FROM php:${PHP}-cli-alpine
|
FROM php:${PHP}-cli-alpine
|
||||||
|
|
||||||
RUN apk update \
|
RUN apk update \
|
||||||
&& apk add zip libzip-dev icu-dev
|
&& apk add zip libzip-dev icu-dev git
|
||||||
|
|
||||||
RUN docker-php-ext-configure zip
|
RUN docker-php-ext-configure zip
|
||||||
RUN docker-php-ext-install zip
|
RUN docker-php-ext-install zip
|
||||||
|
|||||||
@ -107,7 +107,7 @@ final class NameFilterIterator extends RecursiveFilterIterator
|
|||||||
if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) {
|
if (preg_match('/^(.*?)#(\d+)(?:-(\d+))?$/', $filter, $matches)) {
|
||||||
if (isset($matches[3]) && $matches[2] < $matches[3]) {
|
if (isset($matches[3]) && $matches[2] < $matches[3]) {
|
||||||
$filter = sprintf(
|
$filter = sprintf(
|
||||||
'%s.*with data set #(\d+)$',
|
'%s.*with dataset #(\d+)$',
|
||||||
$matches[1]
|
$matches[1]
|
||||||
);
|
);
|
||||||
|
|
||||||
@ -115,7 +115,7 @@ final class NameFilterIterator extends RecursiveFilterIterator
|
|||||||
$this->filterMax = (int) $matches[3];
|
$this->filterMax = (int) $matches[3];
|
||||||
} else {
|
} else {
|
||||||
$filter = sprintf(
|
$filter = sprintf(
|
||||||
'%s.*with data set #%s$',
|
'%s.*with dataset #%s$',
|
||||||
$matches[1],
|
$matches[1],
|
||||||
$matches[2]
|
$matches[2]
|
||||||
);
|
);
|
||||||
@ -125,7 +125,7 @@ final class NameFilterIterator extends RecursiveFilterIterator
|
|||||||
// * testDetermineJsonError@JSON.*
|
// * testDetermineJsonError@JSON.*
|
||||||
elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) {
|
elseif (preg_match('/^(.*?)@(.+)$/', $filter, $matches)) {
|
||||||
$filter = sprintf(
|
$filter = sprintf(
|
||||||
'%s.*with data set "%s"$',
|
'%s.*with dataset "%s"$',
|
||||||
$matches[1],
|
$matches[1],
|
||||||
$matches[2]
|
$matches[2]
|
||||||
);
|
);
|
||||||
|
|||||||
@ -241,7 +241,7 @@ trait Testable
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($testParameterTypes[$argumentIndex], [\Closure::class, 'callable', 'mixed'])) {
|
if (in_array($testParameterTypes[$argumentIndex], [Closure::class, 'callable', 'mixed'])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ trait Testable
|
|||||||
return $arguments;
|
return $arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (in_array($testParameterTypes[0], [\Closure::class, 'callable'])) {
|
if (in_array($testParameterTypes[0], [Closure::class, 'callable'])) {
|
||||||
return $arguments;
|
return $arguments;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -291,7 +291,7 @@ trait Testable
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new DatasetArgsCountMismatch($this->dataName(), $requiredParametersCount, $suppliedParametersCount);
|
throw new DatasetArgsCountMismatch($requiredParametersCount, $suppliedParametersCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -10,7 +10,7 @@ namespace Pest\Contracts\Plugins;
|
|||||||
interface HandlesArguments
|
interface HandlesArguments
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Adds arguments before of the Test Suite execution.
|
* Adds arguments before the Test Suite execution.
|
||||||
*
|
*
|
||||||
* @param array<int, string> $arguments
|
* @param array<int, string> $arguments
|
||||||
* @return array<int, string>
|
* @return array<int, string>
|
||||||
|
|||||||
@ -8,8 +8,8 @@ use Exception;
|
|||||||
|
|
||||||
final class DatasetArgsCountMismatch extends Exception
|
final class DatasetArgsCountMismatch extends Exception
|
||||||
{
|
{
|
||||||
public function __construct(string $dataName, int $requiredCount, int $suppliedCount)
|
public function __construct(int $requiredCount, int $suppliedCount)
|
||||||
{
|
{
|
||||||
parent::__construct(sprintf('Test expects %d arguments but dataset [%s] only provides %d', $requiredCount, $dataName, $suppliedCount));
|
parent::__construct(sprintf('Test expects %d arguments but dataset only provides %d', $requiredCount, $suppliedCount));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -6,7 +6,7 @@ namespace Pest;
|
|||||||
|
|
||||||
function version(): string
|
function version(): string
|
||||||
{
|
{
|
||||||
return '2.2.2';
|
return '2.3.0';
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDirectory(string $file = ''): string
|
function testDirectory(string $file = ''): string
|
||||||
|
|||||||
@ -14,15 +14,16 @@ use Pest\Support\Arr;
|
|||||||
use Pest\Support\Container;
|
use Pest\Support\Container;
|
||||||
use Pest\TestSuite;
|
use Pest\TestSuite;
|
||||||
use function Pest\version;
|
use function Pest\version;
|
||||||
|
use Stringable;
|
||||||
use Symfony\Component\Console\Application;
|
use Symfony\Component\Console\Application;
|
||||||
use Symfony\Component\Console\Command\Command;
|
|
||||||
use Symfony\Component\Console\Input\ArgvInput;
|
use Symfony\Component\Console\Input\ArgvInput;
|
||||||
use Symfony\Component\Console\Output\OutputInterface;
|
|
||||||
|
|
||||||
final class Parallel implements HandlesArguments
|
final class Parallel implements HandlesArguments
|
||||||
{
|
{
|
||||||
use HandleArguments;
|
use HandleArguments;
|
||||||
|
|
||||||
|
private const GLOBAL_PREFIX = 'PEST_PARALLEL_GLOBAL_';
|
||||||
|
|
||||||
private const HANDLERS = [
|
private const HANDLERS = [
|
||||||
Parallel\Handlers\Parallel::class,
|
Parallel\Handlers\Parallel::class,
|
||||||
Parallel\Handlers\Pest::class,
|
Parallel\Handlers\Pest::class,
|
||||||
@ -59,6 +60,33 @@ final class Parallel implements HandlesArguments
|
|||||||
return ((int) $argvValue) === 1;
|
return ((int) $argvValue) === 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a global value that can be accessed by the parent process and all workers.
|
||||||
|
*/
|
||||||
|
public static function setGlobal(string $key, string|int|bool|Stringable $value): void
|
||||||
|
{
|
||||||
|
$data = ['value' => $value instanceof Stringable ? $value->__toString() : $value];
|
||||||
|
|
||||||
|
$_ENV[self::GLOBAL_PREFIX.$key] = json_encode($data, JSON_THROW_ON_ERROR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the given global value if one has been set.
|
||||||
|
*/
|
||||||
|
public static function getGlobal(string $key): string|int|bool|null
|
||||||
|
{
|
||||||
|
$placesToCheck = [$_SERVER, $_ENV];
|
||||||
|
|
||||||
|
foreach ($placesToCheck as $location) {
|
||||||
|
if (array_key_exists(self::GLOBAL_PREFIX.$key, $location)) {
|
||||||
|
// @phpstan-ignore-next-line
|
||||||
|
return json_decode((string) $location[self::GLOBAL_PREFIX.$key], true, 512, JSON_THROW_ON_ERROR)['value'] ?? null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
@ -86,12 +114,6 @@ final class Parallel implements HandlesArguments
|
|||||||
*/
|
*/
|
||||||
private function runTestSuiteInParallel(array $arguments): int
|
private function runTestSuiteInParallel(array $arguments): int
|
||||||
{
|
{
|
||||||
if (! class_exists(ParaTestCommand::class)) {
|
|
||||||
$this->askUserToInstallParatest();
|
|
||||||
|
|
||||||
return Command::FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
$handlers = array_filter(
|
$handlers = array_filter(
|
||||||
array_map(fn ($handler): object|string => Container::getInstance()->get($handler), self::HANDLERS),
|
array_map(fn ($handler): object|string => Container::getInstance()->get($handler), self::HANDLERS),
|
||||||
fn ($handler): bool => $handler instanceof HandlesArguments,
|
fn ($handler): bool => $handler instanceof HandlesArguments,
|
||||||
@ -128,20 +150,6 @@ final class Parallel implements HandlesArguments
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Outputs a message to the user asking them to install ParaTest as a dev dependency.
|
|
||||||
*/
|
|
||||||
private function askUserToInstallParatest(): void
|
|
||||||
{
|
|
||||||
/** @var OutputInterface $output */
|
|
||||||
$output = Container::getInstance()->get(OutputInterface::class);
|
|
||||||
|
|
||||||
$output->writeln([
|
|
||||||
'<fg=red>Pest Parallel requires ParaTest to run.</>',
|
|
||||||
'Please run <fg=yellow>composer require --dev brianium/paratest</>.',
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds an instance of the Paratest command.
|
* Builds an instance of the Paratest command.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -235,6 +235,6 @@ final class DatasetsRepository
|
|||||||
return sprintf('(%s)', $exporter->shortenedRecursiveExport($data));
|
return sprintf('(%s)', $exporter->shortenedRecursiveExport($data));
|
||||||
}
|
}
|
||||||
|
|
||||||
return sprintf('data set "%s"', $key);
|
return sprintf('dataset "%s"', $key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -5,6 +5,7 @@ declare(strict_types=1);
|
|||||||
namespace Pest\Support;
|
namespace Pest\Support;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
|
use PHPUnit\Framework\TestCase;
|
||||||
use Throwable;
|
use Throwable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -15,8 +16,7 @@ final class ExceptionTrace
|
|||||||
private const UNDEFINED_METHOD = 'Call to undefined method P\\';
|
private const UNDEFINED_METHOD = 'Call to undefined method P\\';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Ensures the given closure reports
|
* Ensures the given closure reports the good execution context.
|
||||||
* the good execution context.
|
|
||||||
*
|
*
|
||||||
* @return mixed
|
* @return mixed
|
||||||
*
|
*
|
||||||
@ -28,8 +28,14 @@ final class ExceptionTrace
|
|||||||
return $closure();
|
return $closure();
|
||||||
} catch (Throwable $throwable) {
|
} catch (Throwable $throwable) {
|
||||||
if (Str::startsWith($message = $throwable->getMessage(), self::UNDEFINED_METHOD)) {
|
if (Str::startsWith($message = $throwable->getMessage(), self::UNDEFINED_METHOD)) {
|
||||||
|
$class = preg_match('/^Call to undefined method ([^:]+)::/', $message, $matches) === false ? null : $matches[1];
|
||||||
|
|
||||||
$message = str_replace(self::UNDEFINED_METHOD, 'Call to undefined method ', $message);
|
$message = str_replace(self::UNDEFINED_METHOD, 'Call to undefined method ', $message);
|
||||||
|
|
||||||
|
if (class_exists($class) && count(class_parents($class)) > 0 && array_values(class_parents($class))[0] === TestCase::class) {
|
||||||
|
$message .= '. Did you forget to use the [uses()] function? https://pestphp.com/docs/configuring-tests';
|
||||||
|
}
|
||||||
|
|
||||||
Reflection::setPropertyValue($throwable, 'message', $message);
|
Reflection::setPropertyValue($throwable, 'message', $message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Pest Testing Framework 2.2.2.
|
Pest Testing Framework 2.3.0.
|
||||||
|
|
||||||
USAGE: pest <file> [options]
|
USAGE: pest <file> [options]
|
||||||
|
|
||||||
@ -43,17 +43,17 @@
|
|||||||
--enforce-time-limit ................. Enforce time limit based on test size
|
--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
|
--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-defect ... Stop after first error, failure, warning or, risky test
|
||||||
--stop-on-error ............................ Stop execution upon first error
|
--stop-on-error ..................................... Stop after first error
|
||||||
--stop-on-failure ............... Stop execution upon first error or failure
|
--stop-on-failure ................................. Stop after first failure
|
||||||
--stop-on-warning ........................ Stop execution upon first warning
|
--stop-on-warning ................................. Stop after first warning
|
||||||
--stop-on-risky ....................... Stop execution upon first risky test
|
--stop-on-risky ................................ Stop after first risky test
|
||||||
--stop-on-skipped ................... Stop execution upon first skipped test
|
--stop-on-skipped ............................ Stop after first skipped test
|
||||||
--stop-on-incomplete ............. Stop execution upon first incomplete test
|
--stop-on-incomplete ...................... Stop after first incomplete test
|
||||||
--fail-on-incomplete .................... Treat incomplete tests as failures
|
--fail-on-warning Signal failure using shell exit code when a warning was triggered
|
||||||
--fail-on-risky .............................. Treat risky tests as failures
|
--fail-on-risky Signal failure using shell exit code when a test was considered risky
|
||||||
--fail-on-skipped .......................... Treat skipped tests as failures
|
--fail-on-skipped Signal failure using shell exit code when a test was skipped
|
||||||
--fail-on-warning .................... Treat tests with warnings as failures
|
--fail-on-incomplete Signal failure using shell exit code when a test was marked incomplete
|
||||||
--cache-result ............................ Write test results to cache file
|
--cache-result ............................ Write test results to cache file
|
||||||
--do-not-cache-result .............. Do not 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
|
--order-by [order] Run tests in order: default|defects|depends|duration|no-depends|random|reverse|size
|
||||||
|
|||||||
@ -60,8 +60,8 @@
|
|||||||
✓ eager wrapped registered datasets with (1)
|
✓ eager wrapped registered datasets with (1)
|
||||||
✓ eager wrapped registered datasets with (2)
|
✓ eager wrapped registered datasets with (2)
|
||||||
✓ eager registered wrapped datasets did the job right
|
✓ eager registered wrapped datasets did the job right
|
||||||
✓ named datasets with data set "one"
|
✓ named datasets with dataset "one"
|
||||||
✓ named datasets with data set "two"
|
✓ named datasets with dataset "two"
|
||||||
✓ named datasets did the job right
|
✓ named datasets did the job right
|
||||||
✓ lazy named datasets with (Bar Object (…))
|
✓ lazy named datasets with (Bar Object (…))
|
||||||
✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #1
|
✓ it creates unique test case names with ('Name 1', Pest\Plugin Object (), true) #1
|
||||||
@ -96,10 +96,10 @@
|
|||||||
✓ eager wrapped registered multiple datasets with (2) / (1)
|
✓ eager wrapped registered multiple datasets with (2) / (1)
|
||||||
✓ eager wrapped registered multiple datasets with (2) / (2)
|
✓ eager wrapped registered multiple datasets with (2) / (2)
|
||||||
✓ eager wrapped registered multiple datasets did the job right
|
✓ eager wrapped registered multiple datasets did the job right
|
||||||
✓ named multiple datasets with data set "one" / data set "three"
|
✓ named multiple datasets with dataset "one" / dataset "three"
|
||||||
✓ named multiple datasets with data set "one" / data set "four"
|
✓ named multiple datasets with dataset "one" / dataset "four"
|
||||||
✓ named multiple datasets with data set "two" / data set "three"
|
✓ named multiple datasets with dataset "two" / dataset "three"
|
||||||
✓ named multiple datasets with data set "two" / data set "four"
|
✓ named multiple datasets with dataset "two" / dataset "four"
|
||||||
✓ named multiple datasets did the job right
|
✓ named multiple datasets did the job right
|
||||||
✓ more than two datasets with (1) / (3) / (5)
|
✓ more than two datasets with (1) / (3) / (5)
|
||||||
✓ more than two datasets with (1) / (3) / (6)
|
✓ more than two datasets with (1) / (3) / (6)
|
||||||
@ -115,8 +115,8 @@
|
|||||||
✓ eager registered wrapped datasets with Generator functions with (3)
|
✓ eager registered wrapped datasets with Generator functions with (3)
|
||||||
✓ eager registered wrapped datasets with Generator functions with (4)
|
✓ eager registered wrapped datasets with Generator functions with (4)
|
||||||
✓ eager registered wrapped datasets with Generator functions did the job right
|
✓ eager registered wrapped datasets with Generator functions did the job right
|
||||||
✓ eager registered wrapped datasets with Generator functions display description with data set "taylor"
|
✓ eager registered wrapped datasets with Generator functions display description with dataset "taylor"
|
||||||
✓ eager registered wrapped datasets with Generator functions display description with data set "james"
|
✓ eager registered wrapped datasets with Generator functions display description with dataset "james"
|
||||||
✓ it can resolve a dataset after the test case is available with (Closure Object (…)) #1
|
✓ it can resolve a dataset after the test case is available with (Closure Object (…)) #1
|
||||||
✓ it can resolve a dataset after the test case is available with (Closure Object (…)) #2
|
✓ it can resolve a dataset after the test case is available with (Closure Object (…)) #2
|
||||||
✓ it can resolve a dataset after the test case is available with multiple datasets with (Closure Object (…)) / (Closure Object (…)) #1
|
✓ it can resolve a dataset after the test case is available with multiple datasets with (Closure Object (…)) / (Closure Object (…)) #1
|
||||||
@ -903,6 +903,10 @@
|
|||||||
✓ it computes the dataset scope with ('/var/www/project/tests/Featur…rs.php', '/var/www/project/tests/Featur…rs.php') #2
|
✓ it computes the dataset scope with ('/var/www/project/tests/Featur…rs.php', '/var/www/project/tests/Featur…rs.php') #2
|
||||||
✓ it computes the dataset scope with ('/var/www/project/tests/Featur…ts.php', '/var/www/project/tests/Featur…ollers')
|
✓ it computes the dataset scope with ('/var/www/project/tests/Featur…ts.php', '/var/www/project/tests/Featur…ollers')
|
||||||
|
|
||||||
|
PASS Tests\Unit\Support\ExceptionTrace
|
||||||
|
✓ it ensures the given closures reports the correct class name
|
||||||
|
✓ it ensures the given closures reports the correct class name and suggests the [uses()] function
|
||||||
|
|
||||||
PASS Tests\Unit\Support\Reflection
|
PASS Tests\Unit\Support\Reflection
|
||||||
✓ it gets file name from closure
|
✓ it gets file name from closure
|
||||||
✓ it gets property values
|
✓ it gets property values
|
||||||
@ -1004,4 +1008,4 @@
|
|||||||
PASS Tests\Visual\Version
|
PASS Tests\Visual\Version
|
||||||
✓ visual snapshot of help command output
|
✓ visual snapshot of help command output
|
||||||
|
|
||||||
Tests: 2 deprecated, 3 warnings, 4 incomplete, 1 notice, 4 todos, 14 skipped, 703 passed (1702 assertions)
|
Tests: 2 deprecated, 3 warnings, 4 incomplete, 1 notice, 4 todos, 14 skipped, 705 passed (1706 assertions)
|
||||||
@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
Pest Testing Framework 2.2.2.
|
Pest Testing Framework 2.3.0.
|
||||||
|
|
||||||
|
|||||||
@ -10,8 +10,8 @@ it('show only the names of named datasets in their description', function () {
|
|||||||
],
|
],
|
||||||
], __FILE__));
|
], __FILE__));
|
||||||
|
|
||||||
expect($descriptions[0])->toBe('data set "one"')
|
expect($descriptions[0])->toBe('dataset "one"')
|
||||||
->and($descriptions[1])->toBe('data set "two"');
|
->and($descriptions[1])->toBe('dataset "two"');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('show the actual dataset of non-named datasets in their description', function () {
|
it('show the actual dataset of non-named datasets in their description', function () {
|
||||||
@ -38,10 +38,10 @@ it('show only the names of multiple named datasets in their description', functi
|
|||||||
],
|
],
|
||||||
], __FILE__));
|
], __FILE__));
|
||||||
|
|
||||||
expect($descriptions[0])->toBe('data set "one" / data set "three"');
|
expect($descriptions[0])->toBe('dataset "one" / dataset "three"');
|
||||||
expect($descriptions[1])->toBe('data set "one" / data set "four"');
|
expect($descriptions[1])->toBe('dataset "one" / dataset "four"');
|
||||||
expect($descriptions[2])->toBe('data set "two" / data set "three"');
|
expect($descriptions[2])->toBe('dataset "two" / dataset "three"');
|
||||||
expect($descriptions[3])->toBe('data set "two" / data set "four"');
|
expect($descriptions[3])->toBe('dataset "two" / dataset "four"');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('show the actual dataset of multiple non-named datasets in their description', function () {
|
it('show the actual dataset of multiple non-named datasets in their description', function () {
|
||||||
@ -74,10 +74,10 @@ it('show the correct description for mixed named and not-named datasets', functi
|
|||||||
],
|
],
|
||||||
], __FILE__));
|
], __FILE__));
|
||||||
|
|
||||||
expect($descriptions[0])->toBe('data set "one" / (3)');
|
expect($descriptions[0])->toBe('dataset "one" / (3)');
|
||||||
expect($descriptions[1])->toBe('data set "one" / data set "four"');
|
expect($descriptions[1])->toBe('dataset "one" / dataset "four"');
|
||||||
expect($descriptions[2])->toBe('([2]) / (3)');
|
expect($descriptions[2])->toBe('([2]) / (3)');
|
||||||
expect($descriptions[3])->toBe('([2]) / data set "four"');
|
expect($descriptions[3])->toBe('([2]) / dataset "four"');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shows the correct description for long texts with newlines', function () {
|
it('shows the correct description for long texts with newlines', function () {
|
||||||
|
|||||||
21
tests/Unit/Support/ExceptionTrace.php
Normal file
21
tests/Unit/Support/ExceptionTrace.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Pest\Support\ExceptionTrace;
|
||||||
|
|
||||||
|
it('ensures the given closures reports the correct class name', function () {
|
||||||
|
$closure = function () {
|
||||||
|
throw new Exception('Call to undefined method P\Tests\IntentionallyNotExisting::testBasic().');
|
||||||
|
};
|
||||||
|
|
||||||
|
ExceptionTrace::ensure($closure);
|
||||||
|
})->throws(
|
||||||
|
Exception::class,
|
||||||
|
'Call to undefined method Tests\IntentionallyNotExisting::testBasic().',
|
||||||
|
);
|
||||||
|
|
||||||
|
it('ensures the given closures reports the correct class name and suggests the [uses()] function', function () {
|
||||||
|
$this->get();
|
||||||
|
})->throws(
|
||||||
|
Error::class,
|
||||||
|
'Call to undefined method Tests\Unit\Support\ExceptionTrace::get(). Did you forget to use the [uses()] function? https://pestphp.com/docs/configuring-tests',
|
||||||
|
);
|
||||||
@ -15,6 +15,6 @@ $run = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
test('parallel', function () use ($run) {
|
test('parallel', function () use ($run) {
|
||||||
expect($run())->toContain('Tests: 2 deprecated, 3 warnings, 4 incomplete, 1 notice, 4 todos, 11 skipped, 692 passed (1688 assertions)')
|
expect($run())->toContain('Tests: 2 deprecated, 3 warnings, 4 incomplete, 1 notice, 4 todos, 11 skipped, 694 passed (1692 assertions)')
|
||||||
->toContain('Parallel: 3 processes');
|
->toContain('Parallel: 3 processes');
|
||||||
})->skip(PHP_OS_FAMILY === 'Windows');
|
})->skip(PHP_OS_FAMILY === 'Windows');
|
||||||
|
|||||||
Reference in New Issue
Block a user