测试没有MissingViewError的JSON返回控制器方法

时间:2015-12-08 12:43:08

标签: unit-testing cakephp phpunit cakephp-2.0

我正在测试一个只有JSON视图的Controller方法。我的方法按预期运行,但测试方法只返回“MissingViewException”。是否有解决方法在单元测试中避免此异常(除了在View / People / map_leads.ctp中插入空文件)?

PeopleController.php

public function mapLeads($territory_id = null) {
    $leads = $this->Person->getPeople([
        'territory_id' => $territory_id
    ]);
    $this->set('leads', $leads);
}

AppController.php

public $components = ['RequestHandler'];

routes.php文件

Router::parseExtensions('json');

PeopleControllerTest.php

public function testMapLeads() {
    $id = 40;
    $result = $this->testAction('/people/mapLeads/' . $id, array('return' => 'vars'));
}

View / People / json / map_leads.ctp存在并由CakePHP正确使用;它只是想要查看View / People / map_leads.ctp。

的测试

我在CakePHP: calling testAction to a json-returning method causes missing view exception处查看了有关向$ components添加RequestHandler的提醒。这不能解决异常。

2 个答案:

答案 0 :(得分:2)

您没有发出JSON请求/访问JSON端点,因为您的请求网址都不包含.json扩展名,您的请求也不会发送适当的Accept标头(我不会#39;记住后者是否可以使用2.x控制器测试用例类。

使用.json扩展程序,你应该很好。

$this->testAction('/people/mapLeads/' . $id . '.json', array('return' => 'vars'));

答案 1 :(得分:-2)

将此代码写入您的操作中。

$this->autoLayout = false; $this->autoRender = false; $this->response->type('application/javascript');