我正在为我的控制器编写一些单元测试,我在控制器中模拟模型时遇到了一些问题。
一些代码:
class ExampleController extends AppController {
public function some()
{
$this->loadModel('ModelA');
$this->loadModel('ModelB');
//this I want to mock
$modelAVal = $this->ModelA->someFunctionFromModel($param);
$modelBVal = $this->ModelB->ModelCDependentFromModelB->someFunction($param);
}
}
在我的controllertestcase中,我尝试使用以下代码:
public function testSome() {
$mock = $this->generate('Example', [
'models' => ['ModelA', 'ModelB', 'ModelC']
]);
$mock->ModelA->expects($this->once())->method('someFunctionFromModel')->will($this->returnValue(true));
$mock->ModelB->ModelC->expects($this->once())->method('someFunction')->will($this->returnValue(true));
}
错误:在非对象上调用成员函数expected() - 对于我尝试使用的每个模型...
答案 0 :(得分:0)
这是一个老帖子,但我只是遇到了同样的问题。
我这样解决了:
public function testSome() {
// mock your controller
$mock = $this->generate(
'Example',
array(
models' => array('ModelA'),
)
);
// mock modelA and assign it to the mocked controller model
$mock->ModelA = $this->getMockForModel('ModelA', array('someFunction'));
$mock->ModelA
->expects($this->once())
->method('someFunction')
->will($this->returnValue('yeah'));
}
这仅适用于直接相关的模型,而不适用于模拟模型的模拟模型,我不确定这是一个好主意。