mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 15:57:21 +01:00
Merge pull request #465 from pestphp/v2_json_fix
Makes `json` expectation usable in Higher Order Tests
This commit is contained in:
@ -62,7 +62,7 @@ final class Expectation
|
|||||||
/**
|
/**
|
||||||
* Creates a new expectation with the decoded JSON value.
|
* Creates a new expectation with the decoded JSON value.
|
||||||
*
|
*
|
||||||
* @return self<mixed>
|
* @return self<array<int|string, mixed>|bool>
|
||||||
*/
|
*/
|
||||||
public function json(): Expectation
|
public function json(): Expectation
|
||||||
{
|
{
|
||||||
@ -70,7 +70,10 @@ final class Expectation
|
|||||||
InvalidExpectationValue::expected('string');
|
InvalidExpectationValue::expected('string');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->toBeJson()->and(json_decode($this->value, true));
|
/** @var array<int|string, mixed>|bool $value */
|
||||||
|
$value = json_decode($this->value, true);
|
||||||
|
|
||||||
|
return $this->toBeJson()->and($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -79,6 +79,16 @@ final class HigherOrderExpectation
|
|||||||
return $this->expect($value);
|
return $this->expect($value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new expectation with the decoded JSON value.
|
||||||
|
*
|
||||||
|
* @return self<TOriginalValue, array<string|int, mixed>|bool>
|
||||||
|
*/
|
||||||
|
public function json(): self
|
||||||
|
{
|
||||||
|
return new self($this->original, $this->expectation->json()->value);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dynamically calls methods on the class with the given arguments.
|
* Dynamically calls methods on the class with the given arguments.
|
||||||
*
|
*
|
||||||
|
|||||||
@ -74,8 +74,20 @@ it('works with higher order tests')
|
|||||||
->name()->toEqual('Has Methods')
|
->name()->toEqual('Has Methods')
|
||||||
->books()->each->toBeArray;
|
->books()->each->toBeArray;
|
||||||
|
|
||||||
|
it('works consistently with the json expectation method', function () {
|
||||||
|
expect(new HasMethods())
|
||||||
|
->jsonString()->json()->id->toBe(1)
|
||||||
|
->jsonString()->json()->name->toBe('Has Methods')->toBeString()
|
||||||
|
->jsonString()->json()->quantity->toBe(20)->toBeInt();
|
||||||
|
});
|
||||||
|
|
||||||
class HasMethods
|
class HasMethods
|
||||||
{
|
{
|
||||||
|
public function jsonString(): string
|
||||||
|
{
|
||||||
|
return '{ "id": 1, "name": "Has Methods", "quantity": 20 }';
|
||||||
|
}
|
||||||
|
|
||||||
public function name()
|
public function name()
|
||||||
{
|
{
|
||||||
return 'Has Methods';
|
return 'Has Methods';
|
||||||
|
|||||||
Reference in New Issue
Block a user