我使用Cake bake
命令为控制器创建了一个测试。
现在,我想测试控制器的函数“index”,为此我这样做:
public function testIndex() {
echo "printed";
$result = $this->testAction("/comments/1");
echo "not printed";
}
1是param,评论所在帖子的id。无论如何,控制器工作得非常好,没有问题。
如您所见,调用testAction方法后测试崩溃了。 (它不会打印第二个回声)
我已经看到,如果控制器上调用的操作对其模型有任何调用,则testAction调用将不起作用。但是,如果要测试的动作没有对任何模型的任何调用,那么它就可以完美地运行。
这里发生了什么? 顺便说一句,两个数据库,默认和测试都有数据,因此它不是数据库的问题。
感谢。
更新: 这里有Cake烘焙命令生成的testController的其余部分:
<?php
/* Comments Test cases generated on: 2012-04-12 11:49:17 : 1334224157*/
App::uses('CommentsController', 'Controller');
/**
* TestCommentsController *
*/
class TestCommentsController extends CommentsController {
/**
* Auto render
*
* @var boolean
*/
public $autoRender = false;
/**
* Redirect action
*
* @param mixed $url
* @param mixed $status
* @param boolean $exit
* @return void
*/
public function redirect($url, $status = null, $exit = true) {
$this->redirectUrl = $url;
}
}
/**
* CommentsController Test Case
*
*/
class CommentsControllerTestCase extends CakeTestCase {
/**
* Fixtures
*
* @var array
*/
public $fixtures = array('app.comment');
/**
* setUp method
*
* @return void
*/
public function setUp() {
parent::setUp();
$this->Comments = new TestCommentsController();
$this->Comments->constructClasses();
}
/**
* tearDown method
*
* @return void
*/
public function tearDown() {
unset($this->Comments);
parent::tearDown();
}
答案 0 :(得分:1)
当您测试控制器时,请确保按ControllerTestCase
扩展测试用例类以利用testAction()
方法。