Laravel Fluent JSON测试如何断言返回数组中多个指定ID值
解决方案
你可以选择以下两种写法实现需求,两种写法都不需要关心返回体里除了id之外的其他属性:
方案1:使用whereAllIn快速断言(推荐)
直接一次性断言data数组长度为2,且所有元素的id刚好是你指定的两个目标值:
->assertJson( fn (AssertableJson $json) => $json->has('data', 2) ->whereAllIn('data.*.id', [$group1->id, $group2->id]) ->etc() );
方案2:使用contains明确匹配两个元素
如果你需要更清晰的分别断言两个id都存在,可以用contains方法逐个匹配:
->assertJson( fn (AssertableJson $json) => $json->has('data', 2) ->contains('data', fn (AssertableJson $item) => $item->where('id', $group1->id)->etc()) ->contains('data', fn (AssertableJson $item) => $item->where('id', $group2->id)->etc()) ->etc() );
补充说明
你之前的写法存在逻辑问题:has方法传入的第三个回调是对data数组每一项的统一校验规则,按照你之前的写法,会要求返回的两个group的id都等于$group2->id,不符合实际需求,建议调整为上面的写法。
内容的提问来源于stack exchange,提问作者reans
相关产品推荐
相关产品推荐

