我尝试过各种方法,包括设置这篇文章所建议的头部Setting headers for CakePHP Controller unit tests,但我似乎不能在我的控制器单元测试中模拟 AJAX 请求。
我有这个病
if ($this->request->is('ajax')) {
且这
if ($this->params['isAjax'] == 1) {
但是条件不满足。,我甚至尝试设置数组值$this->params['isAjax'] = 1;
,但是出现错误
Indirect modification of overloaded property RoomController::$params has no effect
我的问题是在cakePHP中对控制器进行单元测试时,如何成功地模拟 AJAX 请求。
2条答案
按热度按时间b0zn9rqh1#
您需要坚持使用$this-〉request(在您的例子中是$this-〉request-〉params)。因为$this-〉params本身已被弃用,不应再使用。
但是在您的例子中,您需要做的就是在测试用例中设置正确的$_SERVER或$_ENV键:
那么代码中的
if ($this->request->is('ajax')) {}
就可以正常工作。请访问https://github.com/dereuromark/tools/wiki/Testing#testing-controllers
pbpqsu0x2#
Cake(从v3.x开始)在它的
IntegrationTestTrait
中有一个名为configRequest()
的方法来处理这个问题。在发送请求之前,它将触发
$this->request->is('ajax')
条件。此外,对于上面的响应,您不需要在测试后取消设置,因为它在
parent::tearDown()
中被重置。文件