mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 90fb8c602c | |||
| 3974a65a18 | |||
| 2a54b5819d | |||
| 7177791f1e | |||
| c743b10a87 | |||
| 83f8de17c8 | |||
| da20a62e49 | |||
| c8d3e1a9fa | |||
| f7705fe1c1 | |||
| cf23dfa477 | |||
| ab4787c667 | |||
| bd6b166a62 | |||
| 17340947b3 | |||
| f235d84d95 | |||
| 3c0d780696 | |||
| 16768fca9f | |||
| 95ec0a82b2 | |||
| 0a680dd06e | |||
| 152892cc38 | |||
| 9aad417fb2 | |||
| b58e0cba66 | |||
| 74864c60e1 | |||
| fd4f161edd | |||
| e0939e3e99 | |||
| 2cdd5e3ba0 | |||
| 811ef27ee4 | |||
| 22a7fd0656 | |||
| 698c276cbe | |||
| 6340656ece | |||
| 2d5840f947 | |||
| b8bb3684a3 | |||
| b8cd563569 | |||
| 9fb64599de | |||
| 502f37d280 | |||
| 29cfa8ec35 | |||
| a63cd2e4f5 | |||
| 7249b59e52 | |||
| 5c94d9994e | |||
| bb0a5d8323 | |||
| e888f3613b | |||
| 6c3d8829ce |
2
.github/workflows/integration-tests.yml
vendored
2
.github/workflows/integration-tests.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
|||||||
2
.github/workflows/static.yml
vendored
2
.github/workflows/static.yml
vendored
@ -18,7 +18,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
|||||||
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
- name: Setup PHP
|
- name: Setup PHP
|
||||||
uses: shivammathur/setup-php@v2
|
uses: shivammathur/setup-php@v2
|
||||||
|
|||||||
@ -32,7 +32,6 @@ We cannot thank our sponsors enough for their incredible support in funding Pest
|
|||||||
- [Codecourse](https://codecourse.com/)
|
- [Codecourse](https://codecourse.com/)
|
||||||
- [Laracasts](https://laracasts.com/)
|
- [Laracasts](https://laracasts.com/)
|
||||||
- [Localazy](https://localazy.com)
|
- [Localazy](https://localazy.com)
|
||||||
- [Fathom Analytics](https://usefathom.com/)
|
|
||||||
- [Meema](https://meema.io)
|
- [Meema](https://meema.io)
|
||||||
- [Zapiet](https://www.zapiet.com)
|
- [Zapiet](https://www.zapiet.com)
|
||||||
|
|
||||||
|
|||||||
@ -18,15 +18,15 @@
|
|||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.1.0",
|
"php": "^8.1.0",
|
||||||
"brianium/paratest": "^7.3.0",
|
"brianium/paratest": "^7.3.1",
|
||||||
"nunomaduro/collision": "^7.9.0|^8.0.0",
|
"nunomaduro/collision": "^7.10.0|^8.0.0",
|
||||||
"nunomaduro/termwind": "^1.15.1|^2.0.0",
|
"nunomaduro/termwind": "^1.15.1|^2.0.0",
|
||||||
"pestphp/pest-plugin": "^2.1.1",
|
"pestphp/pest-plugin": "^2.1.1",
|
||||||
"pestphp/pest-plugin-arch": "^2.4.0",
|
"pestphp/pest-plugin-arch": "^2.4.1",
|
||||||
"phpunit/phpunit": "^10.4.1"
|
"phpunit/phpunit": "^10.4.2"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"phpunit/phpunit": ">10.4.1",
|
"phpunit/phpunit": ">10.4.2",
|
||||||
"sebastian/exporter": "<5.1.0",
|
"sebastian/exporter": "<5.1.0",
|
||||||
"webmozart/assert": "<1.11.0"
|
"webmozart/assert": "<1.11.0"
|
||||||
},
|
},
|
||||||
@ -52,7 +52,7 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"pestphp/pest-dev-tools": "^2.16.0",
|
"pestphp/pest-dev-tools": "^2.16.0",
|
||||||
"pestphp/pest-plugin-type-coverage": "^2.4.0",
|
"pestphp/pest-plugin-type-coverage": "^2.5.0",
|
||||||
"symfony/process": "^6.3.4"
|
"symfony/process": "^6.3.4"
|
||||||
},
|
},
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
@ -76,7 +76,7 @@
|
|||||||
"test:type:coverage": "php bin/pest --type-coverage --min=100",
|
"test:type:coverage": "php bin/pest --type-coverage --min=100",
|
||||||
"test:unit": "php bin/pest --colors=always --exclude-group=integration --compact",
|
"test:unit": "php bin/pest --colors=always --exclude-group=integration --compact",
|
||||||
"test:inline": "php bin/pest --colors=always --configuration=phpunit.inline.xml",
|
"test:inline": "php bin/pest --colors=always --configuration=phpunit.inline.xml",
|
||||||
"test:parallel": "php bin/pest --colors=always --exclude-group=integration --parallel --processes=10",
|
"test:parallel": "php bin/pest --colors=always --exclude-group=integration --parallel --processes=3",
|
||||||
"test:integration": "php bin/pest --colors=always --group=integration",
|
"test:integration": "php bin/pest --colors=always --group=integration",
|
||||||
"update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always --update-snapshots",
|
"update:snapshots": "REBUILD_SNAPSHOTS=true php bin/pest --colors=always --update-snapshots",
|
||||||
"test": [
|
"test": [
|
||||||
@ -109,6 +109,11 @@
|
|||||||
"Pest\\Plugins\\Version",
|
"Pest\\Plugins\\Version",
|
||||||
"Pest\\Plugins\\Parallel"
|
"Pest\\Plugins\\Parallel"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"phpstan": {
|
||||||
|
"includes": [
|
||||||
|
"extension.neon"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
4
extension.neon
Normal file
4
extension.neon
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
parameters:
|
||||||
|
universalObjectCratesClasses:
|
||||||
|
- Pest\Support\HigherOrderTapProxy
|
||||||
|
- Pest\Expectation
|
||||||
@ -193,6 +193,7 @@ trait Testable
|
|||||||
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
|
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
|
||||||
|
|
||||||
$description = $this->dataName() ? $method->description.' with '.$this->dataName() : $method->description;
|
$description = $this->dataName() ? $method->description.' with '.$this->dataName() : $method->description;
|
||||||
|
$description = htmlspecialchars(html_entity_decode($description), ENT_NOQUOTES);
|
||||||
|
|
||||||
if ($method->repetitions > 1) {
|
if ($method->repetitions > 1) {
|
||||||
$matches = [];
|
$matches = [];
|
||||||
|
|||||||
@ -23,9 +23,10 @@ final class Thanks
|
|||||||
* @var array<string, string>
|
* @var array<string, string>
|
||||||
*/
|
*/
|
||||||
private const FUNDING_MESSAGES = [
|
private const FUNDING_MESSAGES = [
|
||||||
'Star the project on GitHub' => 'https://github.com/pestphp/pest',
|
'Star' => 'https://github.com/pestphp/pest',
|
||||||
'Tweet about the project' => 'https://twitter.com/pestphp',
|
'News' => 'https://twitter.com/pestphp',
|
||||||
'Sponsor the project' => 'https://github.com/sponsors/nunomaduro',
|
'Videos' => 'https://youtube.com/@nunomaduro',
|
||||||
|
'Sponsor' => 'https://github.com/sponsors/nunomaduro',
|
||||||
];
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -34,8 +34,6 @@ use PHPUnit\Architecture\Elements\ObjectDescription;
|
|||||||
use PHPUnit\Framework\ExpectationFailedException;
|
use PHPUnit\Framework\ExpectationFailedException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @template TValue
|
* @template TValue
|
||||||
*
|
*
|
||||||
* @property OppositeExpectation $not Creates the opposite expectation.
|
* @property OppositeExpectation $not Creates the opposite expectation.
|
||||||
|
|||||||
@ -15,12 +15,11 @@ final class TestDox implements AddsAnnotations
|
|||||||
public function __invoke(TestCaseMethodFactory $method, array $annotations): array
|
public function __invoke(TestCaseMethodFactory $method, array $annotations): array
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* escapes docblock according to
|
* Escapes docblock according to
|
||||||
* https://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.desc
|
* https://manual.phpdoc.org/HTMLframesConverter/default/phpDocumentor/tutorial_phpDocumentor.howto.pkg.html#basics.desc
|
||||||
*
|
*
|
||||||
* note: '@' escaping is not needed as it cannot be the first character of the line (it always starts with @testdox
|
* Note: '@' escaping is not needed as it cannot be the first character of the line (it always starts with @testdox).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
assert($method->description !== null);
|
assert($method->description !== null);
|
||||||
$methodDescription = str_replace('*/', '{@*}', $method->description);
|
$methodDescription = str_replace('*/', '{@*}', $method->description);
|
||||||
|
|
||||||
|
|||||||
@ -844,6 +844,7 @@ final class Expectation
|
|||||||
|
|
||||||
$string = match (true) {
|
$string = match (true) {
|
||||||
is_string($this->value) => $this->value,
|
is_string($this->value) => $this->value,
|
||||||
|
is_object($this->value) && method_exists($this->value, 'toSnapshot') => $this->value->toSnapshot(),
|
||||||
is_object($this->value) && method_exists($this->value, '__toString') => $this->value->__toString(),
|
is_object($this->value) && method_exists($this->value, '__toString') => $this->value->__toString(),
|
||||||
is_object($this->value) && method_exists($this->value, 'toString') => $this->value->toString(),
|
is_object($this->value) && method_exists($this->value, 'toString') => $this->value->toString(),
|
||||||
$this->value instanceof \Illuminate\Testing\TestResponse => $this->value->getContent(), // @phpstan-ignore-line
|
$this->value instanceof \Illuminate\Testing\TestResponse => $this->value->getContent(), // @phpstan-ignore-line
|
||||||
|
|||||||
@ -105,6 +105,24 @@ final class TestCall
|
|||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the test throws the given `$exceptionClass` when called if the given condition is false.
|
||||||
|
*
|
||||||
|
* @param (callable(): bool)|bool $condition
|
||||||
|
*/
|
||||||
|
public function throwsUnless(callable|bool $condition, string|int $exception, string $exceptionMessage = null, int $exceptionCode = null): self
|
||||||
|
{
|
||||||
|
$condition = is_callable($condition)
|
||||||
|
? $condition
|
||||||
|
: static fn (): bool => $condition;
|
||||||
|
|
||||||
|
if (! $condition()) {
|
||||||
|
return $this->throws($exception, $exceptionMessage, $exceptionCode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Runs the current test multiple times with
|
* Runs the current test multiple times with
|
||||||
* each item of the given `iterable`.
|
* each item of the given `iterable`.
|
||||||
@ -215,6 +233,30 @@ final class TestCall
|
|||||||
: $this;
|
: $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skips the current test unless the given test is running on Windows.
|
||||||
|
*/
|
||||||
|
public function onlyOnWindows(): self
|
||||||
|
{
|
||||||
|
return $this->skipOnMac()->skipOnLinux();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skips the current test unless the given test is running on Mac.
|
||||||
|
*/
|
||||||
|
public function onlyOnMac(): self
|
||||||
|
{
|
||||||
|
return $this->skipOnWindows()->skipOnLinux();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Skips the current test unless the given test is running on Linux.
|
||||||
|
*/
|
||||||
|
public function onlyOnLinux(): self
|
||||||
|
{
|
||||||
|
return $this->skipOnWindows()->skipOnMac();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Repeats the current test the given number of times.
|
* Repeats the current test the given number of times.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -6,7 +6,7 @@ namespace Pest;
|
|||||||
|
|
||||||
function version(): string
|
function version(): string
|
||||||
{
|
{
|
||||||
return '2.23.2';
|
return '2.26.0';
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDirectory(string $file = ''): string
|
function testDirectory(string $file = ''): string
|
||||||
|
|||||||
@ -54,8 +54,8 @@ final class Result
|
|||||||
$returnCode = self::FAILURE_EXIT;
|
$returnCode = self::FAILURE_EXIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
$warnings = $result->numberOfTestsWithTestTriggeredPhpunitWarningEvents() +
|
$warnings = $result->numberOfTestsWithTestTriggeredPhpunitWarningEvents()
|
||||||
+count($result->warnings())
|
+ count($result->warnings())
|
||||||
+ count($result->phpWarnings());
|
+ count($result->phpWarnings());
|
||||||
|
|
||||||
if ($configuration->failOnWarning() && $warnings > 0) {
|
if ($configuration->failOnWarning() && $warnings > 0) {
|
||||||
|
|||||||
@ -190,7 +190,7 @@ final class Reflection
|
|||||||
}
|
}
|
||||||
|
|
||||||
$arguments[$parameter->getName()] = implode('|', array_map(
|
$arguments[$parameter->getName()] = implode('|', array_map(
|
||||||
static fn (ReflectionNamedType $type): string => $type->getName(),
|
static fn (ReflectionNamedType $type): string => $type->getName(), // @phpstan-ignore-line
|
||||||
($types instanceof ReflectionNamedType)
|
($types instanceof ReflectionNamedType)
|
||||||
? [$types] // NOTE: normalize as list of to handle unions
|
? [$types] // NOTE: normalize as list of to handle unions
|
||||||
: $types->getTypes(),
|
: $types->getTypes(),
|
||||||
|
|||||||
@ -0,0 +1,3 @@
|
|||||||
|
{
|
||||||
|
"key": " <div class=\"container\">\n <div class=\"row\">\n <div class=\"col-md-12\">\n <h1>Snapshot<\/h1>\n <\/div>\n <\/div>\n <\/div>"
|
||||||
|
}
|
||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Pest Testing Framework 2.23.2.
|
Pest Testing Framework 2.26.0.
|
||||||
|
|
||||||
USAGE: pest <file> [options]
|
USAGE: pest <file> [options]
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
Pest Testing Framework 2.23.2.
|
Pest Testing Framework 2.26.0.
|
||||||
|
|
||||||
|
|||||||
@ -215,6 +215,14 @@
|
|||||||
✓ it can just define the code if given condition is true
|
✓ it can just define the code if given condition is true
|
||||||
✓ it can just define the message if given condition is 1
|
✓ it can just define the message if given condition is 1
|
||||||
✓ it can just define the code if given condition is 1
|
✓ it can just define the code if given condition is 1
|
||||||
|
✓ it not catch exceptions if given condition is true
|
||||||
|
✓ it catch exceptions if given condition is false
|
||||||
|
✓ it catch exceptions and messages if given condition is false
|
||||||
|
✓ it catch exceptions, messages and code if given condition is false
|
||||||
|
✓ it can just define the message if given condition is false
|
||||||
|
✓ it can just define the code if given condition is false
|
||||||
|
✓ it can just define the message if given condition is 0
|
||||||
|
✓ it can just define the code if given condition is 0
|
||||||
|
|
||||||
PASS Tests\Features\Expect\HigherOrder\methods
|
PASS Tests\Features\Expect\HigherOrder\methods
|
||||||
✓ it can access methods
|
✓ it can access methods
|
||||||
@ -828,6 +836,7 @@
|
|||||||
✓ within describe → pass with dataset with ('my-datas-set-value')
|
✓ within describe → pass with dataset with ('my-datas-set-value')
|
||||||
✓ pass with toArray
|
✓ pass with toArray
|
||||||
✓ pass with array
|
✓ pass with array
|
||||||
|
✓ pass with toSnapshot
|
||||||
✓ failures
|
✓ failures
|
||||||
✓ failures with custom message
|
✓ failures with custom message
|
||||||
✓ not failures
|
✓ not failures
|
||||||
@ -1112,17 +1121,9 @@
|
|||||||
PASS Tests\Helpers\TestInHelpers
|
PASS Tests\Helpers\TestInHelpers
|
||||||
✓ it executes tests in the Helpers directory
|
✓ it executes tests in the Helpers directory
|
||||||
|
|
||||||
PASS Tests\Hooks\AfterAllTest
|
|
||||||
✓ global afterAll execution order
|
|
||||||
✓ it only gets called once per file
|
|
||||||
|
|
||||||
PASS Tests\Hooks\AfterEachTest
|
PASS Tests\Hooks\AfterEachTest
|
||||||
✓ global afterEach execution order
|
✓ global afterEach execution order
|
||||||
|
|
||||||
PASS Tests\Hooks\BeforeAllTest
|
|
||||||
✓ global beforeAll execution order
|
|
||||||
✓ it only gets called once per file
|
|
||||||
|
|
||||||
PASS Tests\Hooks\BeforeEachTest
|
PASS Tests\Hooks\BeforeEachTest
|
||||||
✓ global beforeEach execution order
|
✓ global beforeEach execution order
|
||||||
|
|
||||||
@ -1194,6 +1195,7 @@
|
|||||||
✓ it show the correct description for mixed named and not-named datasets
|
✓ it show the correct description for mixed named and not-named datasets
|
||||||
✓ it shows the correct description for long texts with newlines
|
✓ it shows the correct description for long texts with newlines
|
||||||
✓ it shows the correct description for arrays with many elements
|
✓ it shows the correct description for arrays with many elements
|
||||||
|
✓ it shows the correct description of datasets with html
|
||||||
|
|
||||||
PASS Tests\Unit\Expectations\OppositeExpectation
|
PASS Tests\Unit\Expectations\OppositeExpectation
|
||||||
✓ it throw expectation failed exception with string argument
|
✓ it throw expectation failed exception with string argument
|
||||||
@ -1352,4 +1354,4 @@
|
|||||||
WARN Tests\Visual\Version
|
WARN Tests\Visual\Version
|
||||||
- visual snapshot of help command output
|
- visual snapshot of help command output
|
||||||
|
|
||||||
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 958 passed (2281 assertions)
|
Tests: 2 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 19 skipped, 964 passed (2282 assertions)
|
||||||
@ -59,3 +59,37 @@ it('can just define the message if given condition is 1', function () {
|
|||||||
it('can just define the code if given condition is 1', function () {
|
it('can just define the code if given condition is 1', function () {
|
||||||
throw new Exception('Something bad happened', 1);
|
throw new Exception('Something bad happened', 1);
|
||||||
})->throwsIf(1, 1);
|
})->throwsIf(1, 1);
|
||||||
|
|
||||||
|
it('not catch exceptions if given condition is true', function () {
|
||||||
|
$this->assertTrue(true);
|
||||||
|
})->throwsUnless(true, Exception::class);
|
||||||
|
|
||||||
|
it('catch exceptions if given condition is false', function () {
|
||||||
|
throw new Exception('Something bad happened');
|
||||||
|
})->throwsUnless(function () {
|
||||||
|
return false;
|
||||||
|
}, Exception::class);
|
||||||
|
|
||||||
|
it('catch exceptions and messages if given condition is false', function () {
|
||||||
|
throw new Exception('Something bad happened');
|
||||||
|
})->throwsUnless(false, Exception::class, 'Something bad happened');
|
||||||
|
|
||||||
|
it('catch exceptions, messages and code if given condition is false', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsUnless(false, Exception::class, 'Something bad happened', 1);
|
||||||
|
|
||||||
|
it('can just define the message if given condition is false', function () {
|
||||||
|
throw new Exception('Something bad happened');
|
||||||
|
})->throwsUnless(false, 'Something bad happened');
|
||||||
|
|
||||||
|
it('can just define the code if given condition is false', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsUnless(false, 1);
|
||||||
|
|
||||||
|
it('can just define the message if given condition is 0', function () {
|
||||||
|
throw new Exception('Something bad happened');
|
||||||
|
})->throwsUnless(0, 'Something bad happened');
|
||||||
|
|
||||||
|
it('can just define the code if given condition is 0', function () {
|
||||||
|
throw new Exception('Something bad happened', 1);
|
||||||
|
})->throwsUnless(0, 1);
|
||||||
|
|||||||
@ -103,6 +103,26 @@ test('pass with array', function () {
|
|||||||
])->toMatchSnapshot();
|
])->toMatchSnapshot();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('pass with `toSnapshot`', function () {
|
||||||
|
TestSuite::getInstance()->snapshots->save(json_encode(['key' => $this->snapshotable], JSON_PRETTY_PRINT));
|
||||||
|
|
||||||
|
$object = new class($this->snapshotable)
|
||||||
|
{
|
||||||
|
public function __construct(protected string $snapshotable)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public function toSnapshot()
|
||||||
|
{
|
||||||
|
return json_encode([
|
||||||
|
'key' => $this->snapshotable,
|
||||||
|
], JSON_PRETTY_PRINT);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
expect($object)->toMatchSnapshot();
|
||||||
|
});
|
||||||
|
|
||||||
test('failures', function () {
|
test('failures', function () {
|
||||||
TestSuite::getInstance()->snapshots->save($this->snapshotable);
|
TestSuite::getInstance()->snapshots->save($this->snapshotable);
|
||||||
|
|
||||||
|
|||||||
@ -8,16 +8,16 @@ $foo->beforeEach = false;
|
|||||||
$foo->afterEach = false;
|
$foo->afterEach = false;
|
||||||
$foo->afterAll = false;
|
$foo->afterAll = false;
|
||||||
|
|
||||||
beforeAll(function () {
|
beforeAll(function () use ($foo) {
|
||||||
$foo->beforeAll = true;
|
$foo->beforeAll = true;
|
||||||
});
|
});
|
||||||
beforeEach(function () {
|
beforeEach(function () use ($foo) {
|
||||||
$foo->beforeEach = true;
|
$foo->beforeEach = true;
|
||||||
});
|
});
|
||||||
afterEach(function () {
|
afterEach(function () use ($foo) {
|
||||||
$foo->afterEach = true;
|
$foo->afterEach = true;
|
||||||
});
|
});
|
||||||
afterAll(function () {
|
afterAll(function () use ($foo) {
|
||||||
$foo->afterAll = true;
|
$foo->afterAll = true;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -1,45 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
uses()->afterAll(function () {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->toHaveProperty('afterAll')
|
|
||||||
->and($_SERVER['globalHook']->afterAll)
|
|
||||||
->toBe(0)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->afterAll
|
|
||||||
->toBe(1);
|
|
||||||
|
|
||||||
$_SERVER['globalHook']->afterAll = 1;
|
|
||||||
$_SERVER['globalHook']->calls->afterAll++;
|
|
||||||
});
|
|
||||||
|
|
||||||
afterAll(function () {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->toHaveProperty('afterAll')
|
|
||||||
->and($_SERVER['globalHook']->afterAll)
|
|
||||||
->toBe(1)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->afterAll
|
|
||||||
->toBe(2);
|
|
||||||
|
|
||||||
$_SERVER['globalHook']->afterAll = 2;
|
|
||||||
$_SERVER['globalHook']->calls->afterAll++;
|
|
||||||
});
|
|
||||||
|
|
||||||
test('global afterAll execution order', function () {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->not()
|
|
||||||
->toHaveProperty('afterAll')
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->afterAll
|
|
||||||
->toBe(0);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('only gets called once per file', function () {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->not()
|
|
||||||
->toHaveProperty('afterAll')
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->afterAll
|
|
||||||
->toBe(0);
|
|
||||||
});
|
|
||||||
@ -1,55 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use Pest\Plugins\Parallel;
|
|
||||||
use Pest\Support\Str;
|
|
||||||
|
|
||||||
// HACK: we have to determine our $_SERVER['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])) || Parallel::isWorker();
|
|
||||||
$offset = $single ? 0 : 2;
|
|
||||||
|
|
||||||
uses()->beforeAll(function () use ($offset) {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->toHaveProperty('beforeAll')
|
|
||||||
->and($_SERVER['globalHook']->beforeAll)
|
|
||||||
->toBe(0)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->beforeAll
|
|
||||||
->toBe(1 + $offset);
|
|
||||||
|
|
||||||
$_SERVER['globalHook']->beforeAll = 1;
|
|
||||||
$_SERVER['globalHook']->calls->beforeAll++;
|
|
||||||
});
|
|
||||||
|
|
||||||
beforeAll(function () use ($offset) {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->toHaveProperty('beforeAll')
|
|
||||||
->and($_SERVER['globalHook']->beforeAll)
|
|
||||||
->toBe(1)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->beforeAll
|
|
||||||
->toBe(2 + $offset);
|
|
||||||
|
|
||||||
$_SERVER['globalHook']->beforeAll = 2;
|
|
||||||
$_SERVER['globalHook']->calls->beforeAll++;
|
|
||||||
});
|
|
||||||
|
|
||||||
test('global beforeAll execution order', function () use ($offset) {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->toHaveProperty('beforeAll')
|
|
||||||
->and($_SERVER['globalHook']->beforeAll)
|
|
||||||
->toBe(2)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->beforeAll
|
|
||||||
->toBe(3 + $offset);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('only gets called once per file', function () use ($offset) {
|
|
||||||
expect($_SERVER['globalHook'])
|
|
||||||
->beforeAll
|
|
||||||
->toBe(2)
|
|
||||||
->and($_SERVER['globalHook']->calls)
|
|
||||||
->beforeAll
|
|
||||||
->toBe(3 + $offset);
|
|
||||||
});
|
|
||||||
@ -99,3 +99,13 @@ it('shows the correct description for arrays with many elements', function () {
|
|||||||
|
|
||||||
expect($descriptions[0])->toBe('([1, 2, 3, …])');
|
expect($descriptions[0])->toBe('([1, 2, 3, …])');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('shows the correct description of datasets with html', function () {
|
||||||
|
$descriptions = array_keys(DatasetsRepository::resolve([
|
||||||
|
[
|
||||||
|
'<div class="flex items-center"></div>',
|
||||||
|
],
|
||||||
|
], __FILE__));
|
||||||
|
|
||||||
|
expect($descriptions[0])->toBe('(\'<div class="flex items-center"></div>\')');
|
||||||
|
});
|
||||||
|
|||||||
@ -20,7 +20,7 @@ $names = [
|
|||||||
'卜竹弓一十山' => '__pest_evaluable_卜竹弓一十山',
|
'卜竹弓一十山' => '__pest_evaluable_卜竹弓一十山',
|
||||||
'アゴデヸ' => '__pest_evaluable_アゴデヸ',
|
'アゴデヸ' => '__pest_evaluable_アゴデヸ',
|
||||||
'!p8VrB' => '__pest_evaluable__p8VrB',
|
'!p8VrB' => '__pest_evaluable__p8VrB',
|
||||||
'&xe6VeKWF#n4' => '__pest_evaluable__xe6VeKWF_n4',
|
'&xe6VeKWF#n4' => '__pest_evaluable__amp_xe6VeKWF_n4',
|
||||||
'%%HurHUnw7zM!' => '__pest_evaluable___HurHUnw7zM_',
|
'%%HurHUnw7zM!' => '__pest_evaluable___HurHUnw7zM_',
|
||||||
'rundeliekend' => '__pest_evaluable_rundeliekend',
|
'rundeliekend' => '__pest_evaluable_rundeliekend',
|
||||||
'g%%c!Jt9$fy#Kf' => '__pest_evaluable_g__c_Jt9_fy_Kf',
|
'g%%c!Jt9$fy#Kf' => '__pest_evaluable_g__c_Jt9_fy_Kf',
|
||||||
@ -33,7 +33,7 @@ $names = [
|
|||||||
'Каролин' => '__pest_evaluable_Каролин',
|
'Каролин' => '__pest_evaluable_Каролин',
|
||||||
'অ্যান্টার্কটিকা' => '__pest_evaluable_অ্যান্টার্কটিকা',
|
'অ্যান্টার্কটিকা' => '__pest_evaluable_অ্যান্টার্কটিকা',
|
||||||
'Frýdek-Místek"' => '__pest_evaluable_Frýdek_Místek_',
|
'Frýdek-Místek"' => '__pest_evaluable_Frýdek_Místek_',
|
||||||
'Allingåbro&' => '__pest_evaluable_Allingåbro_',
|
'Allingåbro&' => '__pest_evaluable_Allingåbro_amp_',
|
||||||
'Κεντροαφρικανική Δημοκρατία' => '__pest_evaluable_Κεντροαφρικανική_Δημοκρατία',
|
'Κεντροαφρικανική Δημοκρατία' => '__pest_evaluable_Κεντροαφρικανική_Δημοκρατία',
|
||||||
'آذربایجان غربی' => '__pest_evaluable_آذربایجان_غربی',
|
'آذربایجان غربی' => '__pest_evaluable_آذربایجان_غربی',
|
||||||
'זימבבואה' => '__pest_evaluable_זימבבואה',
|
'זימבבואה' => '__pest_evaluable_זימבבואה',
|
||||||
|
|||||||
@ -16,7 +16,7 @@ $run = function () {
|
|||||||
|
|
||||||
test('parallel', function () use ($run) {
|
test('parallel', function () use ($run) {
|
||||||
expect($run('--exclude-group=integration'))
|
expect($run('--exclude-group=integration'))
|
||||||
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 947 passed (2266 assertions)')
|
->toContain('Tests: 1 deprecated, 4 warnings, 5 incomplete, 2 notices, 13 todos, 15 skipped, 953 passed (2267 assertions)')
|
||||||
->toContain('Parallel: 3 processes');
|
->toContain('Parallel: 3 processes');
|
||||||
})->skipOnWindows();
|
})->skipOnWindows();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user