Это может быть или не быть специфичным для Laravel.Хотя помощник Laravel задействован, эта проблема может возникать и в других местах.
assertJsonCount
использует функцию PHPUnit PHPUnit::assertCount
, которая использует помощник laravel data_get
, имеющий следующую подпись:
/**
* Get an item from an array or object using "dot" notation.
*
* @param mixed $target
* @param string|array|int $key
* @param mixed $default
* @return mixed
*/
function data_get($target, $key, $default = null)
{
if (is_null($key)) {
return $target;
}
...
Мы можем видеть, что возвращаемый JSON является вложенным массивом, поэтому логически мы должны передать ключ 0.
$response->assertJsonCount($expectedProducts->count(), '0');
Однако это будет проигнорировано, так как assertCount
функция проверяет, имеет ли ключбыло передано с использованием is_null
.
Чтобы преодолеть это, мы можем сосчитать всех потомков 0:
$response->assertJsonCount($expectedProducts->count(), '0.*');
Это даст желаемый результат.