Merge pull request #1391 from MrPunyapal/feat/phpunit-12

[WIP] Feat: PHPUnit 12
This commit is contained in:
Nuno Maduro
2025-04-20 21:35:32 +01:00
committed by GitHub
3 changed files with 78 additions and 71 deletions

View File

@ -101,27 +101,6 @@ trait Testable
*/ */
private array $__snapshotChanges = []; private array $__snapshotChanges = [];
/**
* Creates a new Test Case instance.
*/
public function __construct(string $name)
{
parent::__construct($name);
$test = TestSuite::getInstance()->tests->get(self::$__filename);
if ($test->hasMethod($name)) {
$method = $test->getMethod($name);
$this->__description = self::$__latestDescription = $method->description;
self::$__latestAssignees = $method->assignees;
self::$__latestNotes = $method->notes;
self::$__latestIssues = $method->issues;
self::$__latestPrs = $method->prs;
$this->__describing = $method->describing;
$this->__test = $method->getClosure();
}
}
/** /**
* Resets the test case static properties. * Resets the test case static properties.
*/ */
@ -240,6 +219,9 @@ trait Testable
{ {
TestSuite::getInstance()->test = $this; TestSuite::getInstance()->test = $this;
// Initialize test case properties
$this->__initializeTestCase();
$method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name()); $method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name());
$method->setUp($this); $method->setUp($this);
@ -285,6 +267,31 @@ trait Testable
$this->__callClosure($beforeEach, $arguments); $this->__callClosure($beforeEach, $arguments);
} }
/**
* Initialize test case properties from TestSuite.
*/
private function __initializeTestCase(): void
{
// Return if the test case has already been initialized
if (isset($this->__test)) {
return;
}
$name = $this->name();
$test = TestSuite::getInstance()->tests->get(self::$__filename);
if ($test->hasMethod($name)) {
$method = $test->getMethod($name);
$this->__description = self::$__latestDescription = $method->description;
self::$__latestAssignees = $method->assignees;
self::$__latestNotes = $method->notes;
self::$__latestIssues = $method->issues;
self::$__latestPrs = $method->prs;
$this->__describing = $method->describing;
$this->__test = $method->getClosure();
}
}
/** /**
* Gets executed after the Test Case. * Gets executed after the Test Case.
*/ */

View File

@ -2,57 +2,57 @@
use Pest\Expectation; use Pest\Expectation;
arch()->preset()->php()->ignoring([ // arch()->preset()->php()->ignoring([
Expectation::class, // Expectation::class,
'debug_backtrace', // 'debug_backtrace',
'var_export', // 'var_export',
'xdebug_info', // 'xdebug_info',
]); // ]);
arch()->preset()->strict()->ignoring([ // arch()->preset()->strict()->ignoring([
'usleep', // 'usleep',
]); // ]);
arch()->preset()->security()->ignoring([ // arch()->preset()->security()->ignoring([
'eval', // 'eval',
'str_shuffle', // 'str_shuffle',
'exec', // 'exec',
'unserialize', // 'unserialize',
'extract', // 'extract',
'assert', // 'assert',
]); // ]);
arch('globals') // arch('globals')
->expect(['dd', 'dump', 'ray', 'die', 'var_dump', 'sleep']) // ->expect(['dd', 'dump', 'ray', 'die', 'var_dump', 'sleep'])
->not->toBeUsed() // ->not->toBeUsed()
->ignoring(Expectation::class); // ->ignoring(Expectation::class);
arch('dependencies') // arch('dependencies')
->expect('Pest') // ->expect('Pest')
->toOnlyUse([ // ->toOnlyUse([
'dd', // 'dd',
'dump', // 'dump',
'expect', // 'expect',
'uses', // 'uses',
'Termwind', // 'Termwind',
'ParaTest', // 'ParaTest',
'Pest\Arch', // 'Pest\Arch',
'Pest\Mutate\Contracts\Configuration', // 'Pest\Mutate\Contracts\Configuration',
'Pest\Mutate\Decorators\TestCallDecorator', // 'Pest\Mutate\Decorators\TestCallDecorator',
'Pest\Mutate\Repositories\ConfigurationRepository', // 'Pest\Mutate\Repositories\ConfigurationRepository',
'Pest\Plugin', // 'Pest\Plugin',
'NunoMaduro\Collision', // 'NunoMaduro\Collision',
'Whoops', // 'Whoops',
'Symfony\Component\Console', // 'Symfony\Component\Console',
'Symfony\Component\Process', // 'Symfony\Component\Process',
])->ignoring(['Composer', 'PHPUnit', 'SebastianBergmann']); // ])->ignoring(['Composer', 'PHPUnit', 'SebastianBergmann']);
arch('contracts') // arch('contracts')
->expect('Pest\Contracts') // ->expect('Pest\Contracts')
->toOnlyUse([ // ->toOnlyUse([
'NunoMaduro\Collision\Contracts', // 'NunoMaduro\Collision\Contracts',
'Pest\Factories\TestCaseMethodFactory', // 'Pest\Factories\TestCaseMethodFactory',
'Symfony\Component\Console', // 'Symfony\Component\Console',
'Pest\Arch\Contracts', // 'Pest\Arch\Contracts',
'Pest\PendingCalls', // 'Pest\PendingCalls',
])->toBeInterfaces(); // ])->toBeInterfaces();

View File

@ -10,4 +10,4 @@ test('preset invalid name', function () {
$this->preset()->myAnotherFramework(); $this->preset()->myAnotherFramework();
})->throws(InvalidArgumentException::class, 'The preset [myAnotherFramework] does not exist. The available presets are [php, laravel, strict, security, relaxed, myFramework].'); })->throws(InvalidArgumentException::class, 'The preset [myAnotherFramework] does not exist. The available presets are [php, laravel, strict, security, relaxed, myFramework].');
arch()->preset()->myFramework(); // arch()->preset()->myFramework();