मैं SimpleTest 1.0.1 का उपयोग कर केकपीएचपी (केवल 1.2.4 जारी) के साथ एक नया एप्लीकेशन लिख रहा हूं। मैंने Cookbook के प्रासंगिक खंडों को पढ़ा है, Bakery पर खोज की है, और नियंत्रक परीक्षण (hard way और with mocks) पर मार्क स्टोरी की पोस्टिंग पढ़ें।केकपीएचपी नियंत्रकों के वास्तविक दुनिया परीक्षण?
दुर्भाग्य से, गैर-तुच्छ नियंत्रकों के वास्तविक-विश्व परीक्षण के बारे में इनमें से कोई भी वार्ता नहीं है। बहुत सारे ऐप्स लॉग इन के पीछे साइट के क्षेत्रों को डालते हैं, फिर भी मैं यह नहीं समझ सकता कि:
- संरक्षित पृष्ठ रीडायरेक्ट तक अतिथि पहुंच का परीक्षण कैसे करें?
- वैध प्रमाण-पत्र अपेक्षित सत्र चर सेट करता है?
- अमान्य प्रमाण-पत्र त्रुटि संदेश के साथ लॉगिन पृष्ठ को फिर से प्रदर्शित करता है?
नियंत्रक और परीक्षण नीचे काम नहीं करते जैसा मैंने सोचा था कि वे करेंगे। दोनों कथनों असफल और मैं भी एक PHP त्रुटि मिलती है:
विफल [शून्य] [.../ऐप्स/परीक्षण/मामलों/नियंत्रक/users_controller.test.php लाइन 79] पर शून्य नहीं होना चाहिए ... /app/tests/cases/controllers/users_controller.test.php -> UsersControllerTest -> testLogin
विफल समान उम्मीद में विफल रहता है के रूप में [अमान्य] से मेल नहीं खाता [पूर्णांक: 1] [.../ऐप्स/परीक्षण पर /cases/controllers/users_controller.test.php लाइन 80] .../ऐप्स/परीक्षण/मामलों/नियंत्रक/users_controller.test.php -> UsersControllerTest -> testLogin
त्रुटि अप्रत्याशित PHP त्रुटि [अपरिभाषित अनुक्रमणिका: कार्रवाई] गंभीरता [E_NOTICE] [.../केक/libs/नियंत्रक/घटक/auth.php लाइन 266] .../ऐप/परीक्षण/मामलों/नियंत्रक/user_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);
}
}