Laravel AssertJsonCount для вложенного массива - PullRequest
0 голосов
/ 10 апреля 2019

Как я могу вызвать assertJsonCount, используя индексированный вложенный массив?

В моем тесте возвращается следующий JSON:

[[{"sku":"P09250"},{"sku":"P03293"}]]

Но попытка использовать assertJsonCount возвращает следующую ошибку:

$response->assertJsonCount(2);

// Failed asserting that actual size 1 matches expected size 2.

1 Ответ

1 голос
/ 10 апреля 2019

Это может быть или не быть специфичным для 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.*');

Это даст желаемый результат.

...