1

次のように、アクションとフィルターがバインドされた 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 をモックすることもできますが、少し奇妙だと思います。

何か案は?

4

1 に答える 1

0

アクション名「testAction」が原因だと思います。アクションの命名規則は、次の形式にする必要があります。

public function actionName(){
}

アクション名を actionTest() に変更します

于 2013-12-21T09:33:14.467 に答える