使用PHPUnit和CIUnit在CodeIgniter 2中重定向函数

时间:2012-03-12 14:00:44

标签: unit-testing redirect phpunit codeigniter-2

我使用PHPUnit 3.5和CIUnit与PHING 2.4进行单元测试我的CodeIgniter控制器功能

问题是当我测试的函数包含redirect()函数时,测试用例将停止并且不会继续执行。此处也没有可用的错误日志。

这可能是什么问题?我是否必须下载/更新PHPUnit特定库?

任何建议都将不胜感激。

由于

2 个答案:

答案 0 :(得分:1)

这是因为在执行重定向后redirect() fn 退出(这是您在等待浏览器时执行重定向以停止进一步执行代码时应该执行的操作重定向)。

<强> /system/helpers/url_helper.php:

/**
 * Header Redirect
 *
 * Header redirect in two flavors
 * For very fine grained control over headers, you could use the Output
 * Library's set_header() function.
 *
 * @access  public
 * @param   string  the URL
 * @param   string  the method: location or redirect
 * @return  string
 */
if ( ! function_exists('redirect'))
{
    function redirect($uri = '', $method = 'location', $http_response_code = 302)
    {
        if ( ! preg_match('#^https?://#i', $uri))
        {
            $uri = site_url($uri);
        }

        switch($method)
        {
            case 'refresh'  : header("Refresh:0;url=".$uri);
                break;
            default         : header("Location: ".$uri, TRUE, $http_response_code);
                break;
        }
        exit;  <===<<< here is the exit
    }
}

“绕过”的唯一方法是在重定向呼叫后消除exit;

参考: http://codeigniter.com/user_guide/helpers/url_helper.html

答案 1 :(得分:1)

我也遇到了这个问题。我需要测试某个功能是否重定向。我最后断言新的重定向网址以某个字符串结束:

#Calling the controller method    
$this->ci->register();
#output the headers
$out = $this->ci->ouput->get_headers();
#check that the uri ends with where it is redirecting
$this->assertStringEndsWith('/user', (string)$out[0][0]);

请记住,单元测试仅适用于特定方法。如果您需要使用诸如硒之类的东西测试多个重定向到不同的控制器/方法,以及为每个单独的方法测试单元测试。