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