phpunit-wrapper
phpunit-wrapper copied to clipboard
JsonContains mismatches nested sequential array
Hi, I'm not sure if it's a bug or expected behaviour.
This example matches correctly:
<?php
$actualJson = [
'foo' => [
'bar' => ['cat', 'dog']
]
];
$expectedJson = ['cat', 'dog'];
(new JsonContains($expectedJson))->evaluate(json_encode($actualJson));
// success
While this example fails - it can not match a sequential array when it's inside of another sequential array:
<?php
$actualJson = [
'foo' => [
['cat', 'dog']
]
];
$expectedJson = ['cat', 'dog'];
(new JsonContains($expectedJson))->evaluate(json_encode($actualJson));
// failed
There is a workaround to wrap the expected value in an array one more time, but still looks weird that it does not work in the example above.
<?php
$actualJson = [
'foo' => [
['some noise'],
['cat', 'dog'],
['some noise'],
]
];
$expectedJson = [['cat', 'dog']];
(new JsonContains($expectedJson))->evaluate(json_encode($actualJson));
// success
It seems you need to wrap it as many times as amount of sequential arrays on the way to the matched value.
In the next example content
is a collection of objects and rows
is a collection of arrays. And you need to wrap the expected result twice, only then it matches:
<?php
$actualJson = [
'content' => [
[
'rows' => [
['cat', 'dog']
]
]
]
];
$expectedJson = [[['cat', 'dog']]];
(new JsonContains($expectedJson))->evaluate(json_encode($actualJson));