如何模拟来自视图的请求。

时间:2013-10-07 20:05:45

标签: php cakephp

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

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

3 个答案:

答案 0 :(得分:1)

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

$model = $this->getMockForModel('MyModel', array('save'));
$model->expects($this->once())
        ->method('save')
        ->will($this->returnValue(true));

答案 1 :(得分:0)

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

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

您可以做的另一件事是在控制器放置的动作功能顶部:

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

...它将绕过布局并跳过视图渲染,因此您可以在不使用视图的情况下输出您喜欢的任何内容。

答案 2 :(得分:0)

在行动开始时,您可以使用:

  

$ this-&gt; autoRender = false;

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

如果一切看起来都正确,请删除dump()和die()并再次测试它。

Ayo Akinyemi的第一个回复如果你是单位测试你的应用程序也应该很好。