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 回答