Unit testing CakePHP2.0模拟身份验证

Unit testing CakePHP2.0模拟身份验证,unit-testing,cakephp,mocking,Unit Testing,Cakephp,Mocking,我正在Cake 2.2中开发一个应用程序, 我现在正在写一些单元测试。 模型测试工作正常,我对控制器测试有一些问题 情况: -大多数操作都需要用户登录 -有自定义组件和供应商库 -我有所有桌子的固定装置 问题是: -许多操作使用“$this->Auth->user()”方法获取用户数据 -如果我为该操作编写测试,那么用户数据(显然)不存在 我的(不工作)解决方案: -我尝试模拟auth组件,使其包含user方法并始终返回包含用户数据的静态数组,但它返回null,代码如下: $Days = $th

我正在Cake 2.2中开发一个应用程序, 我现在正在写一些单元测试。 模型测试工作正常,我对控制器测试有一些问题

情况: -大多数操作都需要用户登录 -有自定义组件和供应商库 -我有所有桌子的固定装置

问题是: -许多操作使用“$this->Auth->user()”方法获取用户数据 -如果我为该操作编写测试,那么用户数据(显然)不存在

我的(不工作)解决方案: -我尝试模拟auth组件,使其包含user方法并始终返回包含用户数据的静态数组,但它返回null,代码如下:

$Days = $this->generate('Days', array('components' => 'Auth'));
$Days->Auth->expects($this->once())->method('user')->will($this->returnValue(array(..userdata etc.)));
$result = $this->testAction('/days/settings');
它只是一直说没有调用该方法(尽管Days controller中的设置方法只调用了一次)。 模型有什么问题?嗯

任何帮助都将不胜感激

-编辑- 正在测试的方法的代码:

public function myDays()
{
   $user = $this->Auth->user();
   $days = $this->Day->find('all', array('conditions' => array('user_id' => $user['id'], 'active' => 1)));
   $this->set('days', $days);
}
可能使用:

$Days->Auth->staticExpects(

因为user()是一个静态方法。

您是否在测试中多次调用
testAction
?这是您的整个测试方法吗?嗨,不,只有一次,这是该操作中的完整代码,因为它不起作用,我没有为它编写其他测试代码。请同时包括您正在测试的方法,这可能有助于了解发生了什么。感谢您的回答,我插入了代码=)嗯,好奇,这真的应该起作用。。您确定
/days/settings
url已映射到
myDays()
?像beforeFilter()这样的东西怎么样,在请求过程中您是否可能被重定向到其他地方?另外,您是否尝试过将
expects()
替换为
staticExpects()
?看起来很奇怪,但食谱上提到了。。