mirror of
https://github.com/pestphp/pest.git
synced 2026-03-11 10:17:23 +01:00
Higher Order Tests now resolve callable expectations. The tap method now always returns the test case.
This commit is contained in:
@ -7,15 +7,15 @@ namespace Pest\PendingObjects;
|
|||||||
use Closure;
|
use Closure;
|
||||||
use Pest\Factories\TestCaseFactory;
|
use Pest\Factories\TestCaseFactory;
|
||||||
use Pest\Support\Backtrace;
|
use Pest\Support\Backtrace;
|
||||||
|
use Pest\Support\HigherOrderCallables;
|
||||||
use Pest\Support\NullClosure;
|
use Pest\Support\NullClosure;
|
||||||
use Pest\TestSuite;
|
use Pest\TestSuite;
|
||||||
use SebastianBergmann\Exporter\Exporter;
|
use SebastianBergmann\Exporter\Exporter;
|
||||||
|
|
||||||
/*
|
/**
|
||||||
* @mixin \Pest\Support\HigherOrderCallables
|
|
||||||
* @method \Pest\Expectations\Expectation expect(mixed $value)
|
|
||||||
*
|
|
||||||
* @internal
|
* @internal
|
||||||
|
*
|
||||||
|
* @mixin HigherOrderCallables
|
||||||
*/
|
*/
|
||||||
final class TestCall
|
final class TestCall
|
||||||
{
|
{
|
||||||
|
|||||||
@ -81,7 +81,6 @@ final class Coverage implements AddsOutput, HandlesArguments
|
|||||||
}
|
}
|
||||||
|
|
||||||
if ($input->getOption(self::MIN_OPTION) !== null) {
|
if ($input->getOption(self::MIN_OPTION) !== null) {
|
||||||
/* @phpstan-ignore-next-line */
|
|
||||||
$this->coverageMin = (float) $input->getOption(self::MIN_OPTION);
|
$this->coverageMin = (float) $input->getOption(self::MIN_OPTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -4,6 +4,8 @@ declare(strict_types=1);
|
|||||||
|
|
||||||
namespace Pest\Support;
|
namespace Pest\Support;
|
||||||
|
|
||||||
|
use Pest\Expectation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*/
|
*/
|
||||||
@ -19,6 +21,34 @@ final class HigherOrderCallables
|
|||||||
$this->target = $target;
|
$this->target = $target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template TValue
|
||||||
|
*
|
||||||
|
* Create a new expectation. Callable values will be executed prior to returning the new expectation.
|
||||||
|
*
|
||||||
|
* @param callable|TValue $value
|
||||||
|
*
|
||||||
|
* @return Expectation<TValue>
|
||||||
|
*/
|
||||||
|
public function expect($value)
|
||||||
|
{
|
||||||
|
return new Expectation(is_callable($value) ? Reflection::bindCallable($value) : $value);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @template TValue
|
||||||
|
*
|
||||||
|
* Create a new expectation. Callable values will be executed prior to returning the new expectation.
|
||||||
|
*
|
||||||
|
* @param callable|TValue $value
|
||||||
|
*
|
||||||
|
* @return Expectation<TValue>
|
||||||
|
*/
|
||||||
|
public function and($value)
|
||||||
|
{
|
||||||
|
return $this->expect($value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @template TValue
|
* @template TValue
|
||||||
*
|
*
|
||||||
@ -28,6 +58,8 @@ final class HigherOrderCallables
|
|||||||
*/
|
*/
|
||||||
public function tap(callable $callable)
|
public function tap(callable $callable)
|
||||||
{
|
{
|
||||||
return Reflection::bindCallable($callable) ?? $this->target;
|
Reflection::bindCallable($callable);
|
||||||
|
|
||||||
|
return $this->target;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -410,8 +410,8 @@
|
|||||||
PASS Tests\Features\HigherOrderTests
|
PASS Tests\Features\HigherOrderTests
|
||||||
✓ it proxies calls to object
|
✓ it proxies calls to object
|
||||||
✓ it is capable doing multiple assertions
|
✓ it is capable doing multiple assertions
|
||||||
|
✓ it resolves expect callables correctly
|
||||||
✓ it can tap into the test
|
✓ it can tap into the test
|
||||||
✓ it can use the returned instance from a tap
|
|
||||||
|
|
||||||
WARN Tests\Features\Incompleted
|
WARN Tests\Features\Incompleted
|
||||||
… incompleted
|
… incompleted
|
||||||
|
|||||||
@ -10,14 +10,18 @@ it('is capable doing multiple assertions')
|
|||||||
->assertTrue(true)
|
->assertTrue(true)
|
||||||
->assertFalse(false);
|
->assertFalse(false);
|
||||||
|
|
||||||
|
it('resolves expect callables correctly')
|
||||||
|
->expect(function () { return 'foo'; })
|
||||||
|
->toBeString()
|
||||||
|
->toBe('foo')
|
||||||
|
->and('bar')
|
||||||
|
->toBeString()
|
||||||
|
->toBe('bar');
|
||||||
|
|
||||||
it('can tap into the test')
|
it('can tap into the test')
|
||||||
->expect('foo')->toBeString()->toBe('foo')
|
->expect('foo')->toBeString()
|
||||||
->tap(function () { expect($this)->toBeInstanceOf(TestCase::class); })
|
->tap(function () { expect($this)->toBeInstanceOf(TestCase::class); })
|
||||||
|
->toBe('foo')
|
||||||
->and('hello world')->toBeString();
|
->and('hello world')->toBeString();
|
||||||
|
|
||||||
it('can use the returned instance from a tap')
|
|
||||||
->expect('foo')->toBeString()->toBe('foo')
|
|
||||||
->tap(function () { return expect($this); })
|
|
||||||
->toBeInstanceOf(TestCase::class);
|
|
||||||
|
|
||||||
afterEach()->assertTrue(true);
|
afterEach()->assertTrue(true);
|
||||||
|
|||||||
Reference in New Issue
Block a user