CakePHP 4 JSON 视图 - Return 不同的响应 Http 代码
CakePHP 4 JSON View - Return different Response Http Code
我尝试在 CakePHP 中设置一个 Json 响应视图。
我多次阅读文档 https://book.cakephp.org/4/en/views/json-and-xml-views.html,但我找不到 return 特定响应代码的解决方案。
这就是我目前的代码
$customers = $this->Customers->find('all')->where(['organisation_id' =>1] )->contain($this->contain)->toArray();
$this->set('customers', $customers);
$this->viewBuilder()->setOption('serialize', 'customers');
$this->viewBuilder()->setClassName('Json');
我知道我可以 return 一个 json 和一个响应代码
return $this->response->withStatus(400)->withType('json')->withStringBody(json_encode($customers));
但是使用这段代码你不能为它编写测试。我希望有人对此有解决方案。
我不明白为什么不能为后一种变体编写测试。您的测试不应该关心实现细节,它们应该只测试请求 returns.
的响应
也就是说,您可以配置响应而无需从控制器 return 它们,只需将它们重新设置到控制器的 属性:
$this->response = $this->response->withStatus(400);
您绝对可以测试该自定义代码和正文,例如:
$this->get('/customers/yourfunction.json');
$this->assertResponseCode(400); // Check for the custom response code
$this->assertResponseContains('{"customers":'); // Checks for the start of the JSON body, but you can check the response body is as expected any number of ways
我尝试在 CakePHP 中设置一个 Json 响应视图。 我多次阅读文档 https://book.cakephp.org/4/en/views/json-and-xml-views.html,但我找不到 return 特定响应代码的解决方案。
这就是我目前的代码
$customers = $this->Customers->find('all')->where(['organisation_id' =>1] )->contain($this->contain)->toArray();
$this->set('customers', $customers);
$this->viewBuilder()->setOption('serialize', 'customers');
$this->viewBuilder()->setClassName('Json');
我知道我可以 return 一个 json 和一个响应代码
return $this->response->withStatus(400)->withType('json')->withStringBody(json_encode($customers));
但是使用这段代码你不能为它编写测试。我希望有人对此有解决方案。
我不明白为什么不能为后一种变体编写测试。您的测试不应该关心实现细节,它们应该只测试请求 returns.
的响应也就是说,您可以配置响应而无需从控制器 return 它们,只需将它们重新设置到控制器的 属性:
$this->response = $this->response->withStatus(400);
您绝对可以测试该自定义代码和正文,例如:
$this->get('/customers/yourfunction.json');
$this->assertResponseCode(400); // Check for the custom response code
$this->assertResponseContains('{"customers":'); // Checks for the start of the JSON body, but you can check the response body is as expected any number of ways