我正在尝试测试使用CakePHP Mock对象将值输入到会话组件中,但是我的测试仍然失败,说明还没有调用write方法。我调试了这个,并且知道该方法已被调用,所以不确定我做错了什么。
以下是单元测试中的代码:
$this->controller = $this->generate('Posts', array(
'components' => array(
'Session' => array('write')
)));
$this->testAction(...);
$this->controller->Session
->expects($this->any())
->method('write')
->with('my value here');
我收到以下错误:
方法名称的期望失败等于调用零次或多次时。 模拟方法不存在。
如果我将呼叫更改为期望为 - >预期($ this-> once()),则会出现此错误:
方法名称的期望失败等于1次调用时。 预计方法被调用1次,实际上被称为0次。
我在$ this-> Controller上做了一个var_dump,肯定有一个模拟的会话对象,它似乎注意到对'write'方法的调用,所以我真的不知道为什么我是收到错误消息。
任何建议都将不胜感激!
答案 0 :(得分:2)
模拟设置代码应该在调用$this->testAction()
之前,如:
$this->controller = $this->generate('Posts', array(
'components' => array(
'Session' => array('write')
)));
//Add the method mock details here
$this->controller->Session
->expects($this->any())
->method('write')
->with('my value here');
//Then call testAction
$this->testAction(...);
这应该可以解决你的问题。