mirror of
https://github.com/pestphp/pest.git
synced 2026-03-06 07:47:22 +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.
|
||||
*
|
||||
* @return self<mixed>
|
||||
* @return self<array<int|string, mixed>|bool>
|
||||
*/
|
||||
public function json(): Expectation
|
||||
{
|
||||
@ -70,7 +70,10 @@ final class Expectation
|
||||
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);
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
|
||||
@ -74,8 +74,20 @@ it('works with higher order tests')
|
||||
->name()->toEqual('Has Methods')
|
||||
->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
|
||||
{
|
||||
public function jsonString(): string
|
||||
{
|
||||
return '{ "id": 1, "name": "Has Methods", "quantity": 20 }';
|
||||
}
|
||||
|
||||
public function name()
|
||||
{
|
||||
return 'Has Methods';
|
||||
|
||||
Reference in New Issue
Block a user