私は一般的にphpunitとユニットテストに不慣れです。大きなアプリをcakephp2.0に変換して、すべての単体テストを作成しようとしています。
$ this-> Session-> read('Auth.Account.id')が呼び出されると、144を返すモックオブジェクトを作成しようとしています...これにより、アイテムを持つIDを持つアカウントが提供されます。
ただし、さまざまなbeforeFilter呼び出しで他のSession :: read('AuthCode')呼び出しでモックがエラーになっているように見えるため、エラーが発生します。
メソッド名の期待値は、1回呼び出されたときに等しいです。呼び出しのパラメータ0 SessionComponent :: read('AuthCode')が期待値と一致しません。2つの文字列が等しいことを表明できませんでした。
私が言ったように、私はphpunitとユニットテストに不慣れです...私は何が間違っているのですか?
class PagesController extends MastersController {
public function support(){
if($this->Session->read('Auth.Account.id')) {
$items = $this->Account->Items->find('list', array('conditions'=>array('Items.account_id'=>$this->Session->read('Auth.Account.id'))));
}
$this->set(compact('items'));
}
}
class PagesControllerTestCase extends CakeTestCase {
/**
* Test Support
*
* @return void
*/
public function testSupport() {
#mock controller
$this->PagesController = $this->generate('Pages', array(
'methods'=>array('support'),
'components' => array(
'Auth',
'Session',
),
));
#mock controller expects
$this->PagesController->Session->expects(
$this->once())
->method('read') #Session:read() method will be called at least once
->with($this->equalTo('Auth.Account.id')) #when read method is called with 'Auth.Account.id' as a param
->will($this->returnValue(144)); #will return value 144
#test action
$this->testAction('support');
}
}