chore: refactor TestClosureMustNotBeStatic

This commit is contained in:
Nuno Maduro
2024-08-22 20:59:25 +01:00
parent 748beb17d5
commit 86d2191cae
3 changed files with 19 additions and 5 deletions

View File

@ -4,13 +4,28 @@ declare(strict_types=1);
namespace Pest\Exceptions; namespace Pest\Exceptions;
use InvalidArgumentException;
use NunoMaduro\Collision\Contracts\RenderlessEditor; use NunoMaduro\Collision\Contracts\RenderlessEditor;
use NunoMaduro\Collision\Contracts\RenderlessTrace; use NunoMaduro\Collision\Contracts\RenderlessTrace;
use Pest\Factories\TestCaseMethodFactory;
use Symfony\Component\Console\Exception\ExceptionInterface; use Symfony\Component\Console\Exception\ExceptionInterface;
/** /**
* @internal * @internal
*/ */
final class TestClosureMustNotBeStatic extends \InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace final class TestClosureMustNotBeStatic extends InvalidArgumentException implements ExceptionInterface, RenderlessEditor, RenderlessTrace
{ {
/**
* Creates a new Exception instance.
*/
public function __construct(TestCaseMethodFactory $method)
{
parent::__construct(
sprintf(
'Test closure must not be static. Please remove the `static` keyword from the `%s` method in `%s`.',
$method->description,
$method->filename
)
);
}
} }

View File

@ -221,7 +221,8 @@ final class TestCaseFactory
$method->closure instanceof \Closure && $method->closure instanceof \Closure &&
(new \ReflectionFunction($method->closure))->isStatic() (new \ReflectionFunction($method->closure))->isStatic()
) { ) {
throw new TestClosureMustNotBeStatic("The test `$method->description` closure must not be static in $method->filename.");
throw new TestClosureMustNotBeStatic($method);
} }
if (! $method->receivesArguments()) { if (! $method->receivesArguments()) {

View File

@ -19,9 +19,7 @@ it('does not allow to add the same test description twice', function () {
it('does not allow static closures', function () { it('does not allow static closures', function () {
$testSuite = new TestSuite(getcwd(), 'tests'); $testSuite = new TestSuite(getcwd(), 'tests');
$method = new TestCaseMethodFactory('foo', 'bar', static function () { $method = new TestCaseMethodFactory('foo', 'bar', static function () {});
});
$testSuite->tests->set($method); $testSuite->tests->set($method);
})->throws( })->throws(