mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1a39826935 | |||
| 00990efc97 | |||
| 477d20a54f | |||
| 4105e33c39 | |||
| 08b09f2e98 | |||
| b0fab7e437 | |||
| 8e3444e1db | |||
| fc7a4182b5 |
2
.github/workflows/tests.yml
vendored
2
.github/workflows/tests.yml
vendored
@ -14,7 +14,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, macos-latest] # windows-latest
|
os: [ubuntu-latest, macos-latest] # windows-latest
|
||||||
symfony: ['7.3']
|
symfony: ['7.3']
|
||||||
php: ['8.3', '8.4']
|
php: ['8.3', '8.4', '8.5']
|
||||||
dependency_version: [prefer-stable]
|
dependency_version: [prefer-stable]
|
||||||
|
|
||||||
name: PHP ${{ matrix.php }} - Symfony ^${{ matrix.symfony }} - ${{ matrix.os }} - ${{ matrix.dependency_version }}
|
name: PHP ${{ matrix.php }} - Symfony ^${{ matrix.symfony }} - ${{ matrix.os }} - ${{ matrix.dependency_version }}
|
||||||
|
|||||||
16
README.md
16
README.md
@ -31,22 +31,24 @@ We cannot thank our sponsors enough for their incredible support in funding Pest
|
|||||||
### Platinum Sponsors
|
### Platinum Sponsors
|
||||||
|
|
||||||
- **[Laracasts](https://laracasts.com/?ref=pestphp)**
|
- **[Laracasts](https://laracasts.com/?ref=pestphp)**
|
||||||
|
- **[NativePHP](https://nativephp.com/mobile?ref=pestphp.com)**
|
||||||
|
|
||||||
### Gold Sponsors
|
### Gold Sponsors
|
||||||
|
|
||||||
- **[CodeRabbit](https://coderabbit.ai/?ref=pestphp)**
|
- **[CodeRabbit](https://coderabbit.ai/?ref=pestphp)**
|
||||||
- **[NativePHP](https://nativephp.com/mobile?ref=pestphp.com)**
|
|
||||||
- **[CMS Max](https://cmsmax.com/?ref=pestphp)**
|
- **[CMS Max](https://cmsmax.com/?ref=pestphp)**
|
||||||
|
|
||||||
### Premium Sponsors
|
### Premium Sponsors
|
||||||
|
|
||||||
- [Akaunting](https://akaunting.com/?ref=pestphp)
|
|
||||||
- [DocuWriter.ai](https://www.docuwriter.ai/?ref=pestphp)
|
|
||||||
- [Localazy](https://localazy.com/?ref=pestphp)
|
|
||||||
- [Forge](https://forge.laravel.com/?ref=pestphp)
|
- [Forge](https://forge.laravel.com/?ref=pestphp)
|
||||||
- [Route4Me](https://www.route4me.com/?ref=pestphp)
|
|
||||||
- [Spatie](https://spatie.be/?ref=pestphp)
|
|
||||||
- [Worksome](https://www.worksome.com/?ref=pestphp)
|
|
||||||
- [Zapiet](https://www.zapiet.com/?ref=pestphp)
|
- [Zapiet](https://www.zapiet.com/?ref=pestphp)
|
||||||
|
- [Localazy](https://localazy.com/?ref=pestphp)
|
||||||
|
- [Load Forge](https://loadforge.com/?ref=pestphp)
|
||||||
|
- [DocuWriter.ai](https://www.docuwriter.ai/?ref=pestphp)
|
||||||
|
- [Route4Me](https://www.route4me.com/?ref=pestphp)
|
||||||
|
- [Devtools for Livewire](https://devtools-for-livewire.com/?ref=pestphp)
|
||||||
|
- [Nerdify](https://www.getnerdify.com/?ref=pestphp)
|
||||||
|
- [Akaunting](https://akaunting.com/?ref=pestphp)
|
||||||
|
- [LambdaTest](https://lambdatest.com/?ref=pestphp)
|
||||||
|
|
||||||
Pest is an open-sourced software licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.
|
Pest is an open-sourced software licensed under the **[MIT license](https://opensource.org/licenses/MIT)**.
|
||||||
|
|||||||
@ -86,7 +86,7 @@ $bootPest = (static function (): void {
|
|||||||
$getopt['teamcity-file'] ?? null,
|
$getopt['teamcity-file'] ?? null,
|
||||||
$getopt['testdox-file'] ?? null,
|
$getopt['testdox-file'] ?? null,
|
||||||
isset($getopt['testdox-color']),
|
isset($getopt['testdox-color']),
|
||||||
(int) $getopt['testdox-columns'] ?? null,
|
(int) ($getopt['testdox-columns'] ?? null),
|
||||||
);
|
);
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
|||||||
@ -18,19 +18,19 @@
|
|||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"php": "^8.3.0",
|
"php": "^8.3.0",
|
||||||
"brianium/paratest": "^7.12.0",
|
"brianium/paratest": "^7.14.0",
|
||||||
"nunomaduro/collision": "^8.8.2",
|
"nunomaduro/collision": "^8.8.2",
|
||||||
"nunomaduro/termwind": "^2.3.1",
|
"nunomaduro/termwind": "^2.3.1",
|
||||||
"pestphp/pest-plugin": "^4.0.0",
|
"pestphp/pest-plugin": "^4.0.0",
|
||||||
"pestphp/pest-plugin-arch": "^4.0.0",
|
"pestphp/pest-plugin-arch": "^4.0.0",
|
||||||
"pestphp/pest-plugin-mutate": "^4.0.1",
|
"pestphp/pest-plugin-mutate": "^4.0.1",
|
||||||
"pestphp/pest-plugin-profanity": "^4.1.0",
|
"pestphp/pest-plugin-profanity": "^4.1.0",
|
||||||
"phpunit/phpunit": "^12.3.8",
|
"phpunit/phpunit": "^12.4.1",
|
||||||
"symfony/process": "^7.3.3"
|
"symfony/process": "^7.3.4"
|
||||||
},
|
},
|
||||||
"conflict": {
|
"conflict": {
|
||||||
"filp/whoops": "<2.18.3",
|
"filp/whoops": "<2.18.3",
|
||||||
"phpunit/phpunit": ">12.3.8",
|
"phpunit/phpunit": ">12.4.1",
|
||||||
"sebastian/exporter": "<7.0.0",
|
"sebastian/exporter": "<7.0.0",
|
||||||
"webmozart/assert": "<1.11.0"
|
"webmozart/assert": "<1.11.0"
|
||||||
},
|
},
|
||||||
@ -56,9 +56,9 @@
|
|||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"pestphp/pest-dev-tools": "^4.0.0",
|
"pestphp/pest-dev-tools": "^4.0.0",
|
||||||
"pestphp/pest-plugin-browser": "^4.1.0",
|
"pestphp/pest-plugin-browser": "^4.1.1",
|
||||||
"pestphp/pest-plugin-type-coverage": "^4.0.2",
|
"pestphp/pest-plugin-type-coverage": "^4.0.2",
|
||||||
"psy/psysh": "^0.12.10"
|
"psy/psysh": "^0.12.12"
|
||||||
},
|
},
|
||||||
"minimum-stability": "dev",
|
"minimum-stability": "dev",
|
||||||
"prefer-stable": true,
|
"prefer-stable": true,
|
||||||
|
|||||||
@ -2,7 +2,9 @@
|
|||||||
|
|
||||||
declare(strict_types=1);
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
use Rector\CodingStyle\Rector\FunctionLike\FunctionLikeToFirstClassCallableRector;
|
||||||
use Rector\Config\RectorConfig;
|
use Rector\Config\RectorConfig;
|
||||||
|
use Rector\TypeDeclaration\Rector\ClassMethod\NarrowObjectReturnTypeRector;
|
||||||
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector;
|
use Rector\TypeDeclaration\Rector\ClassMethod\ReturnNeverTypeRector;
|
||||||
|
|
||||||
return RectorConfig::configure()
|
return RectorConfig::configure()
|
||||||
@ -12,6 +14,8 @@ return RectorConfig::configure()
|
|||||||
->withSkip([
|
->withSkip([
|
||||||
__DIR__.'/src/Plugins/Parallel/Paratest/WrapperRunner.php',
|
__DIR__.'/src/Plugins/Parallel/Paratest/WrapperRunner.php',
|
||||||
ReturnNeverTypeRector::class,
|
ReturnNeverTypeRector::class,
|
||||||
|
FunctionLikeToFirstClassCallableRector::class,
|
||||||
|
NarrowObjectReturnTypeRector::class,
|
||||||
])
|
])
|
||||||
->withPreparedSets(
|
->withPreparedSets(
|
||||||
deadCode: true,
|
deadCode: true,
|
||||||
|
|||||||
@ -83,7 +83,7 @@ final class BootFiles implements Bootstrapper
|
|||||||
|
|
||||||
private function bootDatasets(string $testsPath): void
|
private function bootDatasets(string $testsPath): void
|
||||||
{
|
{
|
||||||
assert(strlen($testsPath) > 0);
|
assert($testsPath !== '');
|
||||||
|
|
||||||
$files = (new PhpUnitFileIterator)->getFilesAsArray($testsPath, '.php');
|
$files = (new PhpUnitFileIterator)->getFilesAsArray($testsPath, '.php');
|
||||||
|
|
||||||
|
|||||||
@ -397,7 +397,7 @@ final class Expectation
|
|||||||
*
|
*
|
||||||
* @return Expectation<TValue>|OppositeExpectation<TValue>|EachExpectation<TValue>|HigherOrderExpectation<Expectation<TValue>, TValue|null>|TValue
|
* @return Expectation<TValue>|OppositeExpectation<TValue>|EachExpectation<TValue>|HigherOrderExpectation<Expectation<TValue>, TValue|null>|TValue
|
||||||
*/
|
*/
|
||||||
public function __get(string $name)
|
public function __get(string $name): mixed
|
||||||
{
|
{
|
||||||
if (! self::hasMethod($name)) {
|
if (! self::hasMethod($name)) {
|
||||||
if (! is_object($this->value) && method_exists(PendingArchExpectation::class, $name)) {
|
if (! is_object($this->value) && method_exists(PendingArchExpectation::class, $name)) {
|
||||||
|
|||||||
@ -71,7 +71,7 @@ final readonly class Kernel
|
|||||||
$output,
|
$output,
|
||||||
);
|
);
|
||||||
|
|
||||||
register_shutdown_function(fn () => $kernel->shutdown());
|
register_shutdown_function($kernel->shutdown(...));
|
||||||
|
|
||||||
foreach (self::BOOTSTRAPPERS as $bootstrapper) {
|
foreach (self::BOOTSTRAPPERS as $bootstrapper) {
|
||||||
$bootstrapper = Container::getInstance()->get($bootstrapper);
|
$bootstrapper = Container::getInstance()->get($bootstrapper);
|
||||||
|
|||||||
@ -131,7 +131,7 @@ final readonly class Converter
|
|||||||
|
|
||||||
// clean the paths of each frame.
|
// clean the paths of each frame.
|
||||||
$frames = array_map(
|
$frames = array_map(
|
||||||
fn (string $frame): string => $this->toRelativePath($frame),
|
$this->toRelativePath(...),
|
||||||
$frames
|
$frames
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@ -6,7 +6,7 @@ namespace Pest;
|
|||||||
|
|
||||||
function version(): string
|
function version(): string
|
||||||
{
|
{
|
||||||
return '4.1.0';
|
return '4.1.3';
|
||||||
}
|
}
|
||||||
|
|
||||||
function testDirectory(string $file = ''): string
|
function testDirectory(string $file = ''): string
|
||||||
|
|||||||
@ -31,10 +31,8 @@ final class HigherOrderTapProxy
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Dynamically pass properties gets to the target.
|
* Dynamically pass properties gets to the target.
|
||||||
*
|
|
||||||
* @return mixed
|
|
||||||
*/
|
*/
|
||||||
public function __get(string $property)
|
public function __get(string $property): mixed
|
||||||
{
|
{
|
||||||
if (property_exists($this->target, $property)) {
|
if (property_exists($this->target, $property)) {
|
||||||
return $this->target->{$property};
|
return $this->target->{$property};
|
||||||
|
|||||||
@ -19,7 +19,7 @@ test('pass with dataset', function ($data) {
|
|||||||
[$filename] = TestSuite::getInstance()->snapshots->get();
|
[$filename] = TestSuite::getInstance()->snapshots->get();
|
||||||
|
|
||||||
expect($filename)->toStartWith('tests/.pest/snapshots-external/')
|
expect($filename)->toStartWith('tests/.pest/snapshots-external/')
|
||||||
->toEndWith('pass_with_dataset_with_data_set_____my_datas_set_value___.snap')
|
->toEndWith('pass_with_dataset_with_data_set____my_datas_set_value___.snap')
|
||||||
->and($this->snapshotable)->toMatchSnapshot();
|
->and($this->snapshotable)->toMatchSnapshot();
|
||||||
})->with(['my-datas-set-value']);
|
})->with(['my-datas-set-value']);
|
||||||
|
|
||||||
@ -29,7 +29,7 @@ describe('within describe', function () {
|
|||||||
[$filename] = TestSuite::getInstance()->snapshots->get();
|
[$filename] = TestSuite::getInstance()->snapshots->get();
|
||||||
|
|
||||||
expect($filename)->toStartWith('tests/.pest/snapshots-external/')
|
expect($filename)->toStartWith('tests/.pest/snapshots-external/')
|
||||||
->toEndWith('pass_with_dataset_with_data_set_____my_datas_set_value___.snap')
|
->toEndWith('pass_with_dataset_with_data_set____my_datas_set_value___.snap')
|
||||||
->and($this->snapshotable)->toMatchSnapshot();
|
->and($this->snapshotable)->toMatchSnapshot();
|
||||||
});
|
});
|
||||||
})->with(['my-datas-set-value']);
|
})->with(['my-datas-set-value']);
|
||||||
|
|||||||
@ -0,0 +1,7 @@
|
|||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<h1>Snapshot</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<h1>Snapshot</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
Pest Testing Framework 4.1.0.
|
Pest Testing Framework 4.1.3.
|
||||||
|
|
||||||
USAGE: pest <file> [options]
|
USAGE: pest <file> [options]
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
|
|
||||||
Pest Testing Framework 4.1.0.
|
Pest Testing Framework 4.1.3.
|
||||||
|
|
||||||
|
|||||||
@ -5,8 +5,8 @@
|
|||||||
##teamcity[testStarted name='can also pass' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can also pass' flowId='1234']
|
##teamcity[testStarted name='can also pass' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can also pass' flowId='1234']
|
||||||
##teamcity[testFinished name='can also pass' duration='100000' flowId='1234']
|
##teamcity[testFinished name='can also pass' duration='100000' flowId='1234']
|
||||||
##teamcity[testSuiteStarted name='can pass with dataset' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset' flowId='1234']
|
##teamcity[testSuiteStarted name='can pass with dataset' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset' flowId='1234']
|
||||||
##teamcity[testStarted name='can pass with dataset with data set "@(true)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset with data set "@(true)"' flowId='1234']
|
##teamcity[testStarted name='can pass with dataset with data set "(true)"' locationHint='pest_qn://tests/.tests/SuccessOnly.php::can pass with dataset with data set "(true)"' flowId='1234']
|
||||||
##teamcity[testFinished name='can pass with dataset with data set "@(true)"' duration='100000' flowId='1234']
|
##teamcity[testFinished name='can pass with dataset with data set "(true)"' duration='100000' flowId='1234']
|
||||||
##teamcity[testSuiteFinished name='can pass with dataset' flowId='1234']
|
##teamcity[testSuiteFinished name='can pass with dataset' flowId='1234']
|
||||||
##teamcity[testSuiteFinished name='Tests/tests/SuccessOnly' flowId='1234']
|
##teamcity[testSuiteFinished name='Tests/tests/SuccessOnly' flowId='1234']
|
||||||
|
|
||||||
|
|||||||
@ -75,7 +75,7 @@ test('pass with dataset', function ($data) {
|
|||||||
[$filename] = TestSuite::getInstance()->snapshots->get();
|
[$filename] = TestSuite::getInstance()->snapshots->get();
|
||||||
|
|
||||||
expect($filename)->toStartWith('tests/.pest/snapshots/')
|
expect($filename)->toStartWith('tests/.pest/snapshots/')
|
||||||
->toEndWith('pass_with_dataset_with_data_set_____my_datas_set_value___.snap')
|
->toEndWith('pass_with_dataset_with_data_set____my_datas_set_value___.snap')
|
||||||
->and($this->snapshotable)->toMatchSnapshot();
|
->and($this->snapshotable)->toMatchSnapshot();
|
||||||
})->with(['my-datas-set-value']);
|
})->with(['my-datas-set-value']);
|
||||||
|
|
||||||
@ -85,7 +85,7 @@ describe('within describe', function () {
|
|||||||
[$filename] = TestSuite::getInstance()->snapshots->get();
|
[$filename] = TestSuite::getInstance()->snapshots->get();
|
||||||
|
|
||||||
expect($filename)->toStartWith('tests/.pest/snapshots/')
|
expect($filename)->toStartWith('tests/.pest/snapshots/')
|
||||||
->toEndWith('pass_with_dataset_with_data_set_____my_datas_set_value___.snap')
|
->toEndWith('pass_with_dataset_with_data_set____my_datas_set_value___.snap')
|
||||||
->and($this->snapshotable)->toMatchSnapshot();
|
->and($this->snapshotable)->toMatchSnapshot();
|
||||||
});
|
});
|
||||||
})->with(['my-datas-set-value']);
|
})->with(['my-datas-set-value']);
|
||||||
|
|||||||
Reference in New Issue
Block a user