SimpleTest 1.0.1을 사용하여 CakePHP (방금 1.2.4 버전)로 새로운 응용 프로그램을 작성하고 있습니다. Cookbook의 관련 섹션을 읽고 Bakery에서 검색 한 후 컨트롤러 테스트에서 Mark Story의 게시물 (hard way 및 with mocks)을 읽었습니다.실제적인 CakePHP 컨트롤러 테스트?
불행히도, 실제 컨트롤러가 아닌 테스트에 대해서는 언급하지 않았습니다. 많은 앱에서 로그인 영역에 사이트 영역을 두었지 만 간단한 시나리오를 테스트하는 방법을 알 수 없습니다.
- 게스트가 보호 된 페이지 리디렉션에 액세스 할 수 있습니까?
- 유효한 자격 증명이 예상 세션 변수를 설정합니까?
- 잘못된 자격 증명이 로그인 페이지를 다시 표시하고 오류 메시지가 표시됩니까?
컨트롤러와 테스트는 내가 생각한대로 작동하지 않습니다. 두 주장은 실패하고 나 또한 PHP 오류가 :
는 [NULL]를 실패 .../응용 프로그램/테스트/케이스/컨트롤러/users_controller.test.php 라인 79] 에서 널 안 ... /app/tests/cases/controllers/users_controller.test.php -> UsersControllerTest -> testLogin
가 [NULL]가 일치하지 않는 평등 기대가 실패 실패 [정수 : 1] [.../응용 프로그램/테스트합니다 /cases/controllers/users_controller.test.php 라인 (80)] .../응용 프로그램/테스트/케이스/컨트롤러/users_controller.test.php -> UsersControllerTest -> testLoginERROR 예기치 않은 PHP 오류 [.../cake/libs/controller/components/auth.php 266 행의] [정의되지 않은 색인 : 조치] 심각도 [E_NOTICE] .../app/tests/cases/controllers/users_controller.test .PHP -> UsersControllerTest -> testLogin 여기
컨트롤러 (구운 플러스 마크 스토리의 "하드 방식"시험 방법)입니다 :/* SVN FILE: $Id$ */
/* UsersController Test cases generated on: 2009-08-05 17:08:03 : 1249507923*/
App::import('Controller', 'Users');
class TestUsers extends UsersController
{
var $autoRender = false;
var $redirectUrl;
var $redirectStatus;
var $renderedAction;
var $renderedLayout;
var $renderedFile;
var $stopped;
function redirect($url, $status = null, $exit = true)
{
$this->redirectUrl = $url;
$this->redirectStatus = $status;
}
function render($action = null, $layout = null, $file = null)
{
$this->renderedAction = $action;
$this->renderedLayout = (is_null($layout) ? $this->layout : $layout);
$this->renderedFile = $file;
}
function _stop($status = 0)
{
$this->stopped = $status;
}
}
class UsersControllerTest extends CakeTestCase
{
var $fixtures = array('user');
var $Users = null;
function startTest()
{
$this->Users = new TestUsers();
$this->Users->constructClasses();
$this->Users->Component->initialize($this->Users);
}
function prepareForAction()
{
$this->Users->beforeFilter();
$this->Users->Component->startup($this->Users);
}
function endTest()
{
$this->Users->Session->destroy();
unset($this->Users);
ClassRegistry::flush();
}
//-----------------------------------------------------------------------
function testUsersControllerInstance()
{
$this->assertTrue(is_a($this->Users, 'UsersController'));
}
function testLogin()
{
$this->Users->data = array(
'User' => array(
'username' => 'admin',
'password' => 'admin'
)
);
$this->prepareForAction();
$this->Users->login();
$this->assertNotNull($this->Users->redirectUrl);
$this->assertEqual($this->Users->Session->read('Auth.User.id'), 1);
}
}