assertJson只查看repsonse中的第一个列表.(PHP,Laravel)



问候,

我正在努力制作这个测试来测试我的学校API

$suburb = "BobsTown";
$postcode = 2000;
$response = $this->json('GET',"http://hostname/api/schools/$postcode/$suburb");
$response->
assertStatus(200)->
assertJson([[
["school_name" => "BobsTown High School",
"school_type" => "Secondary"
],
[[
"boys-enrolments" => "439",
"girls-enrolments" => "381",
"indigenous-enrolments" => "12"
]]
]]
);

API的实际静止状态如下。

{
{
{
{
"calendar_year": "2019",
"school_name": "BobsTown Public School",
"suburb": "BobsTown",
"postcode": 2000,
"school_type": "Primary",
},
{
{
"girls-enrolments": 318,
"boys-enrolments": 359,
"indigenous-enrolments": 16,
}
}
},
{
{
"calendar_year": "2019",
"school_name": "BobsTown Valley Public School",
"suburb": "BobsTown",
"postcode": 2000,
"school_type": "Primary",
},
{
{
"girls-enrolments": 281,
"boys-enrolments": 269,
"indigenous-enrolments": 12,
}
}
},
{
{
"calendar_year": "2019",
"school_name": "BobsTown High School",
"suburb": "BobsTown",
"postcode": 2000,
"school_type": "Secondary",
},
{
{
"girls-enrolments": 381,
"boys-enrolments": 439,
"indigenous-enrolments": 12,
}
}
}
}

当被测试的学校是列表中的第一所时,这个测试代码可以正常工作。然而,正如你所看到的,BobsTown高中是列表中最后一所,测试似乎只检查了列表中的首个项目。

phpunit返回此错误。

--- Expected
+++ Actual
@@ @@
...
-      'school_name' => 'BobsTown High School',
+      'school_name' => 'BobsTown Public School',
...

我使用assertJson不正确?我的假设是它返回true,即断言在响应中的任何位置都是true。

我能够使用assertJsonFragment()获得我想要的功能

public function testSchools4()
{
$suburb = "BobsTown";
$postcode = 2000;
$response = $this->json('GET', "http://hostname/api/schools/$postcode/$suburb");
$response->assertStatus(200)->assertJsonFragment(
[
"school_name" => "BobsTown High School",
"school_type" => "Secondary"
]
)->assertJsonFragment([
"girls-enrolments" => 381,
"boys-enrolments" => 439,
"indigenous-enrolments" => 12
]);
}
}

最新更新