gpt4 book ai didi

CakePHP Mocking 模型在 Controller 中动态加载

转载 作者:行者123 更新时间:2023-12-02 01:51:23 24 4
gpt4 key购买 nike

我正在为我的 Controller 编写一些单元测试,但我在 Controller 中模拟模型时遇到了一些问题。

部分代码:

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);
}
}

在我的 Controller 测试用例中,我尝试使用以下代码:

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));
}

错误:在非对象上调用成员函数 expects() - 对于我尝试使用的每个模型...

最佳答案

这是一篇旧帖子,但我只是被同样的问题困住了。

我是这样解决的:

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'));
}

这仅适用于直接相关的模型,而不是模拟模拟模型的模型,我不确定这是个好主意。

关于CakePHP Mocking 模型在 Controller 中动态加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com