사용자 프로필을 편집 할 수있는 컨트롤러 동작을 테스트하려고합니다. 무엇보다도 나는 기록 된 모든 사용자가 자신의 프로필 만 편집 할 수 있고 다른 프로필은 편집 할 수 없다는 것을 테스트하고 싶습니다. 이 제한을 깨뜨린 경우 작업은 미리 정의 된 홈 페이지로 리디렉션되어야합니다. 이 시나리오와 CakePHP 2에서 AuthComponent를 사용하는 컨트롤러에 대한 단위 테스트를 작성하십시오.
, 나는 ID를 가진 사용자를 생성하는기구가 = 1. 그래서 제한이 방법을 테스트에 생각했다 :$data = $this->Users->User->read(null, 1);
$this->Users->Auth->login($data);
$this->testAction('/users/edit/2', array('method' => 'get'));
$url = parse_url($this->headers['Location']);
$this->assertEquals($url['path'], '/homepage');
시험이 어설 전달합니다.
$this->testAction('/users/edit/1', array('method' => 'get', 'return' => 'vars'));
$matcher = array(
'tag' => 'form',
'ancestor' => array('tag' => 'div'),
'descendant' => array('tag' => 'fieldset'),
);
$this->assertTag($matcher, $this->vars['content_for_layout'], 'The edition form was not found');
그러나이 어설 실패 따라서 다음 단계는 사용자의 로그인 ID를 가지고
'/users/edit/1'
을 실행 여부를 확인하는 양식이다.
debug()
을 조사한 결과
$this->Auth->user()
은 전체 정보를 반환하지만
$this->Auth->user('id')
은
null
을 반환합니다. 후자를 작업 내에서 비교하여 사용하기 때문에 false로 평가되고 테스트가 실패합니다.
브라우저에서 동작을 테스트 할 때 발생하지만 브라우저에서 동작을 실행하지 않는 것이 흥미로운 점입니다. 그러면이 작업을 테스트하는 올바른 방법은 무엇입니까?
감사합니다.
$this->Auth->user('id')
다음 중 하나를 시도해보십시오 : 대신
어쨌든'generate()'를 사용해야한다면'ControllerTestCase'를 사용하는 것이 무엇입니까? – elitalon
generate()는 ControllerTestCase에서만 사용할 수 있으며 controller 메소드, 구성 요소, 모델 등을 모의 할 수있는 것과 같이 testAction()을보다 쉽게하기 위해 제공됩니다. generate()를 직접 호출하지 않으면 testAction) CakePHP 디폴트 (_stop() 함수와 redirect() 함수 조롱)로 내부적으로 할 것입니다. –
'generate()'가 실제로 뭔가를했다고 생각했습니다. 이것이 내가 왜'ControllerTestCase'가 기본 설정을 제공했는지를 계속 생각하는 이유입니다. 귀하의 답변을 시도하고 알려 드리겠습니다 :) – elitalon