2014-07-08 2 views
1

이 게시물 Setting headers for CakePHP Controller unit tests에서 제안한 헤더 설정을 포함하여 다양한 방법을 시도했지만 컨트롤러 유닛 테스트에서 ajax 요청을 시뮬레이트 할 수 없습니다.CakePHP 유닛 테스트에서 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 

제 질문은 어떻게하면 성공적으로 ajax 요청을 시뮬레이션 할 수 있습니다 단위 때 cakePHP의 컨트롤러 테스트.

답변

8

$ this-> request ($ this-> request-> params)에 충실해야합니다. $ this-> params 자체는 더 이상 사용되지 않으므로 더 이상 사용하지 않아야합니다. 코드에서

testSomeAjaxAction() { 
    $_SERVER['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'; 
    $url = Router::url(array('controller' => 'posts', 'action' => 'update', 'ext' => 'json', '?' => array('value' => 2))); 
    $options = array(
     'return' => 'vars' 
    ); 
    $result = $this->testAction($url, $options); 
    // Assert 
} 
다음

if ($this->request->is('ajax')) {}가 잘 작동합니다

그러나 귀하의 경우

은, 당신이해야 할 모든 테스트 케이스의 오른쪽 $ _SERVER 또는 $ _ENV 키를 설정하는 것입니다. 그렇지 않으면 다음 테스트를 초래했다 -

내가 테스트 이후에 "해제"글로벌 변수를 갖는 결국 https://github.com/dereuromark/tools/wiki/Testing#testing-controllers

+0

참조하십시오. 그래서 저는 $ _SERVER [ 'HTTP_X_REQUESTED_WITH'] = ''를 아약스 테스트 마지막 줄에 넣었습니다. –

관련 문제