Php 如何从视图模拟请求。

Php 如何从视图模拟请求。,php,cakephp,Php,Cakephp,我是cakephp新手,我只是想知道,如何在不使用视图的情况下测试模型和控制器 我必须模拟使用模型和控制器保存数据,而不使用视图中的from。我想用所需的值创建一个数组,但也许有更好的方法可以做到这一点?您可以随时从控制器(或模型)输出变量,而无需访问视图。是的,这不是使用MVC框架应该做的事情,但是对于测试来说,在模型/控制器中的数据库调用下面很容易处理: <? echo '<pre>'; print_r($my_array); exit; ?> 。。。这将绕过布局并

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


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

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

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

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

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


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

$this->autoRender=false

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

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

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

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