调用一些testActions使测试崩溃

时间:2012-04-19 08:43:47

标签: unit-testing cakephp testing crash cakephp-2.0

我有时会遇到测试问题。执行测试,我甚至可以获得操作的结果,但测试没有显示其绿色或红色消息,告诉我测试是否成功运行。 (28/28测试方法完成:28次通过,0次失败,95次断言和0次异常......),时间,峰值记忆......等。

例如。只有当我尝试执行此测试时,它才会崩溃:

public function testGetHotVideo() {
    $result = $this->testAction("/posts/getHotVideo/");     
    $this->assertEquals($result, 'GoG_Tv5G17M');
}

它称之为:

public function getHotVideo(){
    $video = $this->Post->getHotVideo();
    return $video[0][0]['video'];
}

并正确返回视频字符串。因此它甚至可以打印在测试变量$ result。

这里发生了什么?

更新

我还注意到,当我调用重定向到某个视图的方法时,它会发生相同的情况。 在这种情况下,使用Cake Bake创建默认删除:

public function delete($id = null){ 
        $this->Comment->id = $id;
        if (!$this->Comment->exists()) {
            throw new NotFoundException(__('Invalid comment'));
        }
        if ($this->Comment->delete()) {         
            $this->Session->setFlash(__('Comment deleted'));
            return $this->redirect(array('controller' => 'posts', 'action' => 'index'));
        }
        $this->Session->setFlash(__('Comment was not deleted'));
        return $this->redirect(array('controller' => 'posts', 'action' => 'index'));        
    }

1 个答案:

答案 0 :(得分:0)

这是SimpleTest(cakephp< = 1.3)还是PHPUnit(> 1.3)?

如果是SimpleTest,您必须在控制器测试中处理重定向(read Mark Storys article on controller testing)。基本上你构建了一个测试类,它继承自你正在测试的控制器类,而不是覆盖重定向和其他一些方法(这里有一些来自文章):

class TestPostsController extends PostsController {
    ...     
    function redirect($url, $status = null, $exit = true) {
        $this->redirectUrl = $url;
    }   
    ...
}

比你在测试用例中使用这个经过修改的控制器。

使用CakePHP 2和PHPUnit我甚至在一些布局中调用header()函数时遇到了一些问题,这打破了html结构和测试端的CSS。