From 6769231b00f525905b8ddce865eb7d7a48045c08 Mon Sep 17 00:00:00 2001 From: Nuno Maduro Date: Thu, 15 Sep 2022 09:13:45 +0100 Subject: [PATCH] Fixes using test cases on uses with tests --- src/Concerns/Testable.php | 9 ++++++++- src/Factories/TestCaseFactory.php | 18 ++++++++++++++++++ src/Plugins/Printer.php | 2 +- tests/Features/Coverage.php | 3 +-- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Concerns/Testable.php b/src/Concerns/Testable.php index 615360b4..879b53f1 100644 --- a/src/Concerns/Testable.php +++ b/src/Concerns/Testable.php @@ -65,7 +65,11 @@ trait Testable { parent::__construct($name); - $this->__test = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($name)->getClosure($this); + $test = TestSuite::getInstance()->tests->get(self::$__filename); + + if ($test->hasMethod($name)) { + $this->__test = $test->getMethod($name)->getClosure($this); + } } /** @@ -163,6 +167,8 @@ trait Testable */ protected function setUp(): void { + self::$__description = $this->name(); + TestSuite::getInstance()->test = $this; parent::setUp(); @@ -212,6 +218,7 @@ trait Testable private function __resolveTestArguments(array $arguments): array { $method = TestSuite::getInstance()->tests->get(self::$__filename)->getMethod($this->name()); + if ($this->dataName()) { self::$__description = $method->description . ' with ' . $this->dataName(); } else { diff --git a/src/Factories/TestCaseFactory.php b/src/Factories/TestCaseFactory.php index abf75301..a6542250 100644 --- a/src/Factories/TestCaseFactory.php +++ b/src/Factories/TestCaseFactory.php @@ -240,6 +240,24 @@ final class TestCaseFactory $this->methods[$method->description] = $method; } + /** + * Checks if a test case has a method. + */ + public function hasMethod(string $methodName): bool + { + foreach ($this->methods as $method) { + if ($method->description === null) { + throw ShouldNotHappen::fromMessage('The test description may not be empty.'); + } + + if (Str::evaluable($method->description) === $methodName) { + return true; + } + } + + return false; + } + /** * Gets a Method by the given name. */ diff --git a/src/Plugins/Printer.php b/src/Plugins/Printer.php index b4f4bee3..d594031d 100644 --- a/src/Plugins/Printer.php +++ b/src/Plugins/Printer.php @@ -18,7 +18,7 @@ final class Printer implements HandlesArguments */ public function handleArguments(array $arguments): array { - if (! array_key_exists('COLLISION_PRINTER', $_SERVER)) { + if (!array_key_exists('COLLISION_PRINTER', $_SERVER)) { return $arguments; } diff --git a/tests/Features/Coverage.php b/tests/Features/Coverage.php index 827dc30d..22d58a47 100644 --- a/tests/Features/Coverage.php +++ b/tests/Features/Coverage.php @@ -2,13 +2,12 @@ use Pest\Plugins\Coverage as CoveragePlugin; use Pest\Support\Coverage; -use Pest\TestSuite; use Symfony\Component\Console\Output\ConsoleOutput; it('has plugin')->assertTrue(class_exists(CoveragePlugin::class)); it('adds coverage if --coverage exist', function () { - $plugin = new CoveragePlugin(new ConsoleOutput()); + $plugin = new CoveragePlugin(new ConsoleOutput()); expect($plugin->coverage)->toBeFalse(); $arguments = $plugin->handleArguments([]);