mirror of
https://github.com/pestphp/pest.git
synced 2026-04-21 22:47:27 +02:00
Merge pull request #1565 from louisbels/fix-dataset-method-chaining
fix: dataset inheritance with method chaining (beforeEach()->with(), describe()->with())
This commit is contained in:
@ -47,7 +47,7 @@ if (! function_exists('beforeAll')) {
|
|||||||
function beforeAll(Closure $closure): void
|
function beforeAll(Closure $closure): void
|
||||||
{
|
{
|
||||||
if (DescribeCall::describing() !== []) {
|
if (DescribeCall::describing() !== []) {
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
throw new BeforeAllWithinDescribe($filename);
|
throw new BeforeAllWithinDescribe($filename);
|
||||||
}
|
}
|
||||||
@ -64,7 +64,7 @@ if (! function_exists('beforeEach')) {
|
|||||||
*/
|
*/
|
||||||
function beforeEach(?Closure $closure = null): BeforeEachCall
|
function beforeEach(?Closure $closure = null): BeforeEachCall
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
return new BeforeEachCall(TestSuite::getInstance(), $filename, $closure);
|
return new BeforeEachCall(TestSuite::getInstance(), $filename, $closure);
|
||||||
}
|
}
|
||||||
@ -107,7 +107,7 @@ if (! function_exists('uses')) {
|
|||||||
*/
|
*/
|
||||||
function uses(string ...$classAndTraits): UsesCall
|
function uses(string ...$classAndTraits): UsesCall
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
return new UsesCall($filename, array_values($classAndTraits));
|
return new UsesCall($filename, array_values($classAndTraits));
|
||||||
}
|
}
|
||||||
@ -119,7 +119,7 @@ if (! function_exists('pest')) {
|
|||||||
*/
|
*/
|
||||||
function pest(): Configuration
|
function pest(): Configuration
|
||||||
{
|
{
|
||||||
return new Configuration(Backtrace::file());
|
return new Configuration(Backtrace::testFile());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -179,7 +179,7 @@ if (! function_exists('afterEach')) {
|
|||||||
*/
|
*/
|
||||||
function afterEach(?Closure $closure = null): AfterEachCall
|
function afterEach(?Closure $closure = null): AfterEachCall
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
return new AfterEachCall(TestSuite::getInstance(), $filename, $closure);
|
return new AfterEachCall(TestSuite::getInstance(), $filename, $closure);
|
||||||
}
|
}
|
||||||
@ -192,7 +192,7 @@ if (! function_exists('afterAll')) {
|
|||||||
function afterAll(Closure $closure): void
|
function afterAll(Closure $closure): void
|
||||||
{
|
{
|
||||||
if (DescribeCall::describing() !== []) {
|
if (DescribeCall::describing() !== []) {
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
throw new AfterAllWithinDescribe($filename);
|
throw new AfterAllWithinDescribe($filename);
|
||||||
}
|
}
|
||||||
@ -209,7 +209,7 @@ if (! function_exists('covers')) {
|
|||||||
*/
|
*/
|
||||||
function covers(array|string ...$classesOrFunctions): void
|
function covers(array|string ...$classesOrFunctions): void
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
$beforeEachCall = (new BeforeEachCall(TestSuite::getInstance(), $filename));
|
$beforeEachCall = (new BeforeEachCall(TestSuite::getInstance(), $filename));
|
||||||
|
|
||||||
@ -238,7 +238,7 @@ if (! function_exists('mutates')) {
|
|||||||
*/
|
*/
|
||||||
function mutates(array|string ...$targets): void
|
function mutates(array|string ...$targets): void
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
$filename = Backtrace::testFile();
|
||||||
|
|
||||||
$beforeEachCall = (new BeforeEachCall(TestSuite::getInstance(), $filename));
|
$beforeEachCall = (new BeforeEachCall(TestSuite::getInstance(), $filename));
|
||||||
$beforeEachCall->group('__pest_mutate_only');
|
$beforeEachCall->group('__pest_mutate_only');
|
||||||
|
|||||||
@ -5,7 +5,6 @@ declare(strict_types=1);
|
|||||||
namespace Pest\PendingCalls;
|
namespace Pest\PendingCalls;
|
||||||
|
|
||||||
use Closure;
|
use Closure;
|
||||||
use Pest\Support\Backtrace;
|
|
||||||
use Pest\Support\Description;
|
use Pest\Support\Description;
|
||||||
use Pest\TestSuite;
|
use Pest\TestSuite;
|
||||||
|
|
||||||
@ -53,7 +52,11 @@ final class DescribeCall
|
|||||||
*/
|
*/
|
||||||
public function __destruct()
|
public function __destruct()
|
||||||
{
|
{
|
||||||
unset($this->currentBeforeEachCall);
|
// Ensure BeforeEachCall destructs before creating tests
|
||||||
|
// by moving to local scope and clearing the reference
|
||||||
|
$beforeEach = $this->currentBeforeEachCall;
|
||||||
|
$this->currentBeforeEachCall = null;
|
||||||
|
unset($beforeEach); // Trigger destructor immediately
|
||||||
|
|
||||||
self::$describing[] = $this->description;
|
self::$describing[] = $this->description;
|
||||||
|
|
||||||
@ -71,12 +74,13 @@ final class DescribeCall
|
|||||||
*/
|
*/
|
||||||
public function __call(string $name, array $arguments): self
|
public function __call(string $name, array $arguments): self
|
||||||
{
|
{
|
||||||
$filename = Backtrace::file();
|
if (! $this->currentBeforeEachCall instanceof \Pest\PendingCalls\BeforeEachCall) {
|
||||||
|
$this->currentBeforeEachCall = new BeforeEachCall(TestSuite::getInstance(), $this->filename);
|
||||||
|
|
||||||
if (! $this->currentBeforeEachCall instanceof BeforeEachCall) {
|
$this->currentBeforeEachCall->describing = array_merge(
|
||||||
$this->currentBeforeEachCall = new BeforeEachCall(TestSuite::getInstance(), $filename);
|
DescribeCall::describing(),
|
||||||
|
[$this->description]
|
||||||
$this->currentBeforeEachCall->describing[] = $this->description;
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->currentBeforeEachCall->{$name}(...$arguments);
|
$this->currentBeforeEachCall->{$name}(...$arguments);
|
||||||
|
|||||||
Reference in New Issue
Block a user