0

我是 cakephp 新手,我只是想知道,如何在不使用视图的情况下测试模型和控制器?

我必须使用模型和控制器模拟保存数据,而不使用视图中的 froms。我正在考虑用所需的值创建一个数组,但也许有更好的方法来做到这一点?

4

3 回答 3

1

您可以使用以下代码模拟您的模型函数:

$model = $this->getMockForModel('MyModel', array('save'));
$model->expects($this->once())
        ->method('save')
        ->will($this->returnValue(true));
于 2013-10-07T20:14:10.050 回答
0

在您的操作开始时,您可以使用:

$this->autoRender = false;

这将允许您通过转到它的路径(例如CONTROLLER/ACTION)直接访问您的操作。在将数据数组传递给 save() 或 saveAll() 之前,我建议使用 Debugger::dump() 仔细检查它,然后使用 die()。这将使包含保存数据的数组打印在您的屏幕上,以便您可以验证它看起来是否正确并遵循 Cake 的约定。die() 将阻止它实际保存数据。

如果一切正常,删除 dump() 和 die() 并再次测试。

如果您正在对应用程序进行单元测试,那么来自 Ayo Akanyemi 的第一个响应也应该可以正常工作。

于 2013-10-08T18:19:33.060 回答
0

您可以随时从控制器(或模型)输出变量,而无需访问视图。是的,这不是你应该如何使用 MVC 框架做事,但为了测试,很容易在模型/控制器中的数据库调用下面敲击它:

<? echo '<pre>'; print_r($my_array); exit; ?>

您可以做的另一件事是在控制器中的操作函数顶部放置:

$this->layout = '';
$this->render(false);

...这将绕过布局并跳过视图渲染,因此您可以在该函数中输出您喜欢的任何内容,而无需使用视图。

于 2013-10-07T20:08:33.203 回答