如何使用索引的嵌套数组调用assertJsonCount

在我的测试中,返回以下JSON:

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


但是尝试使用assertJsonCount会返回以下错误:

$response->assertJsonCount(2);

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

最佳答案

这可能适用于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.*');


这将产生期望的结果。

10-06 14:57