我正在測試使用AppModel方法獲取登錄用戶的帳戶的控制器方法。問題是,我無法有效地模擬提供account_id的AppModel方法,而是在調試此值時變爲null。請讓我知道我錯過了什麼,或者如果我以錯誤的方式解決問題。如何模擬appModel方法返回AuthComponent值
AppModel.php包括:
/**
* _getUser
*
* @param string $key from AuthComponent::user
* @return string value from AuthComponent::user
*/
public function _getUser($key = null) {
return AuthComponent::user($key);
}
AccountsController.php包括:
App::uses('AppController', 'Controller');
class AccountsController extends AppController {
public $name = 'Accounts';
/**
* memberLetters -
* Generate a letter to each member
*
**/
function memberLetters() {
$account_id = $this->Account->_getUser('account_id');
debug($account_id); // !!! returns null; expecting '1' !!!
}
}
用戶模型(user.php的)包括:
App::uses('AuthComponent', 'Controller/Component');
class User extends AppModel {
public $name = 'User';
public $actsAs = array('Acl' => array('type' => 'requester'));
public $validate = array(
'email' => array(
'email' => array(
'rule' => array('email'),
'message' => 'Email address required'),
'isUnique' => array(
'rule' => array('isUnique'),
'message' => 'This email address is already associated with an account.')
),
'password' => array(
'notempty' => array(
'rule' => array('notempty'),
'message' => 'Password required',
),
),
'account_id' => array(
'numeric' => array(
'rule' => array('numeric'),
),
),
);
public $belongsTo = array('Account');
}
測試代碼:AccountsControllerTest.php包括:
App::uses('AccountsController', 'Controller');
class AccountsControllerTest extends ControllerTestCase {
/**
* Fixtures
*
* @var array
*/
public $fixtures = array(
'app.account',
'app.user',
);
/**
* testMemberLetters method
*
* @return void
*/
public function testMemberLetters() {
$model = $this->getMockForModel('Account', array('_getUser'), array());
$model
->expects($this->exactly(1))
->method('_getUser', array('account_id'))
->will($this->returnValue(1));
$result = $this->testAction(
'accounts/memberLetters',
array(
'method' => 'get',
'return' => 'vars',
)
);
}
在哪裏調用testAction在你r控制器測試方法? – AD7six
哎呀! (我編輯它) –