次のように、アクションとフィルターがバインドされた Yii コントローラーがあります。
...
public function testAction() {}
public function filters() {
return array(array('CMyFilter +test'));
}
...
testAction() が実行されるたびに CMyFilter が呼び出されるという単純な事実をテストする方法がわかりません。
私のテストは次のようになります。
$filter = $this->getMockBuilder('CMyFilter')
->disableOriginalConstructor()
->setMethods(array('preFilter'))
->getMock();
$filter->expects($this->once())
->method('preFilter')
->will($this->returnValue(true));
そして、「メソッド名の期待に失敗しました。1回呼び出されたときと同じです。」というメッセージで失敗します。メソッドは 1 回呼び出されると予想されていましたが、実際には 0 回呼び出されました»
実際には、フィルターを使用する代わりに Yii::app()->getRequest()->isAjaxRequest() を呼び出して、テストで CHttpRequest をモックすることもできますが、少し奇妙だと思います。
何か案は?