我在测试用例中发送了一个post请求,并且我想声明一个特定的元素,假设响应中存在键'x'。在这种情况下,我不能说seeJson(['x' => whatever]);
,因为我不知道这个值。当然,我不能用seeJson(['x']);
来做。
有没有办法解决这个问题?
如果重要: Laravel:v5.2.31 PHPUnit:5.3.4
答案 0 :(得分:12)
可能对其他人有帮助。您可以为检查响应json结构编写此测试
$this->post('/api/login/', [
'email' => 'customer3@example.com',
'password' => '123123123',
])->assertJsonStructure([
'status',
'result' => [
'id',
'email',
'full_name',
],
]);
答案 1 :(得分:4)
<击> 虽然它根本不是最优的,但我选择使用此代码来测试情况:
$this->post(URL, PARAMS)->see('x');
X是一个假设的名称,实际的元素键在其余数据中弹出的可能性很小。否则这个讨厌的解决方案是不切实际的。
击>
这是解决方案:
public function testCaseName()
{
$this->post(route('route.name'), [
'param1' => 1,
'param2' => 10,
], [
'headers_if_any' => 'value'
]);
$res_array = (array)json_decode($this->response->content());
$this->assertArrayHasKey('x', $res_array);
}