如何使用Laravel AssertJson测试结构化响应

e5nszbig  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(133)

我有一个以这种格式返回JSON响应的注册API

{
    "meta": {
        //response metadata
    },
    "data": {
        //user object
    }
}

我想用AssertableJson测试这个响应,但我只关心用户对象。

如何仅将AssertableJson用于响应的data属性?

我试过类似的方法但没有成功

$response->data->assertJson(
            function(AssertableJson $json){
                $json->whereType('id', 'string')
                     ->where('email', 'email@gmail.com')
                     ->etc();
            }
        );
rxztt3cl

rxztt3cl1#

要仅对响应的“data”属性使用Laravel的AssertJson方法,可以将“data”属性作为第二个参数传递给AssertJson方法。例如:

// Send a request to the endpoint and store the response
$response = $this->get('/users');

// Test the "data" property of the response
$response->assertJson(['data' => 'expected value'], 'data');

这将测试响应的“data”属性是否与预期值匹配。如果“data”属性与预期值不匹配,测试将失败。
还可以使用AssertJsonStructure方法测试“data”属性的结构,而无需指定每个字段的确切值。例如:

// Test the structure of the "data" property without specifying the exact values
$response->assertJsonStructure(['data' => ['id', 'name', 'email']], 'data');

这将测试“data”属性是否包含一个数组,该数组的对象包含“id”、“name”和“email”字段,但不测试这些字段的特定值。

相关问题