CakePHP的testAction方法可以在重定向调用中存活吗?

时间:2009-12-31 19:59:54

标签: php unit-testing cakephp

我开始使用CakePHP框架和SimpleTest编写单元测试。当您的控制器将浏览器重定向到另一个页面时,该文档会描述a problem with the testAction method。 <{3}}有一个充满希望的音符,但链接已断开。

有人有这个工作吗?知道如何找到断开的链接指向的位置吗?

我发现了使用link to a possible fix覆盖重定向调用的讨论,但这似乎不适用于testAction方法。我怀疑我必须以某种方式向调度员注册模拟控制器。

这是partial mock objects

1 个答案:

答案 0 :(得分:1)

我得到了一些工作,所以我想我会在这里发布。我不确定我是否对此感到满意。

如果您希望能够测试重定向,请更改:

$this->redirect(array('action'=>'index'));

到此:

$this->redirect(array('action'=>'index'), null, false);
return 'redirected to index';

现在您的测试看起来像这样:

$data = array(...);
$result = $this->testAction(
    '/people/edit/1',
    array('method' => 'post', 'data' => $data));
$this->assertEqual(
    'redirected to index',
    $result);

控制器重定向方法的问题在于它默认调用exit(),并退出整个测试套件。此版本将false传递给重定向方法的$ exit参数,然后使用return而不是exit()。如果您愿意,返回值只是测试用例验证的内容,尽管它与浏览器以及重定向标头一起回显。但是,只要它是一条小信息,我就不会发现任何问题。

当我们调用return而不是exit()时,似乎没有任何可能在控制器方法之后执行的重要代码。快速测试表明该页面运行正常。