我想在我的UsersController.php測試登錄()動作CakePHP2測試登錄()
<?php
class UsersController extends AppController {
public $helpers = array('Html', 'Form');
public $components = array('RequestHandler');
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('logout', 'login');
// $this->Auth->allow('logout');
$this->Security->csrfExpires = '+1 hour';
}
public function login() {
if($this->request->is('post')) {
if ($this->Auth->login()) {
return $this->redirect($this->Auth->redirect());
} else {
$this->Session->setFlash(__('Invalid username or password, try again'),'info');
}
}
}
的AppController.php
<?php
App::uses('Controller', 'Controller');
class AppController extends Controller {
public $components = array(
'Session',
'Security',
'Auth' => array(
'loginRedirect' => array('controller' => 'dashboards', 'action' => 'index'),
'logoutRedirect' => array('controller' => 'dashboards', 'action' => 'welcome'),
'authorize' => array('Controller')
)
);
public function isAuthorized($user) {
//Admin can access every action
if (isset($user['role']) && $user['role'] === 'admin') {
return true;
}
//Default deny
$this->Session->setFlash('You are not allowed to access the requested page');
return false;
}
}
的UsersControllerTest.php
<?php
class UsersControllerTest extends ControllerTestCase {
public $autoRender = false;
public $fixtures = array('app.user','app.account');
public function setUp() {
parent::setUp();
$this->User = ClassRegistry::init('User');
}
...snip...
public function testLogin() {
$this->Users = $this->generate('Users', array(
'components' => array(
//'Session',
'Security' => array('_validatePost'),
)
));
$this->Users->Security->expects($this->any())
->method('_validatePost')
->will($this->returnValue(true));
$user = array();
$user['User']['username'] = 'admin';
//$user['User']['password'] = Security::hash('test', null, true);
$user['User']['password'] = 'test';
$result = $this->testAction('/users/login',
array('data' => $user, 'method' => 'post', 'return' => 'contents')
);
debug($this->contents);
//OUTPUTS: I get "Invalid username or password, try again"
//EXPECTED: A successful login message since I provided the correct credentials
}
那麼,如何在
$this->testAction('/users/login', array('data' => $user, 'method' => 'post', 'return' => 'contents'));
什麼都不返回時測試我的login()方法?
輸出:我得到「無效的用戶名或密碼,請重試」
預期:成功的登錄信息,因爲我提供正確的憑據
任何答覆將不勝感激。謝謝!
感謝您的回覆jeremyharris。但我仍然得到錯誤的結果。請參閱http://pastie.org/4110786 – wenbert
在將密碼傳遞給登錄操作之前,您不應該對密碼進行哈希處理。稍後由認證過程完成。另外,你沒有設置任何東西,所以'$ this-> vars'將一直是空的。當它通過時,頭部不會。如果您調試會話,您應該看到「Invalid username ...」消息。 – jeremyharris
謝謝@jeremyharris。這就說得通了。但是,我遇到了一個新問題,現在我得到「無效的用戶名/密碼」而不是「傳遞」登錄名。請參閱上面的更新代碼。 – wenbert