функция перенаправления в CodeIgniter 2 с PHPUnit и CIUnit - PullRequest
3 голосов
/ 12 марта 2012

Я использую PHPUnit 3.5 и CIUnit с PHING 2.4 для модульного тестирования функций моего контроллера CodeIgniter

Проблема в том, что в протестированной мной функции есть функция redirect (), тестовый сценарий остановится и не будетвыполнение.Для этого также нет доступного журнала ошибок.

В чем может быть проблема?Нужно ли загружать / обновлять определенную библиотеку PHPUnit?

Любое предложение будет с благодарностью.

Спасибо

Ответы [ 2 ]

1 голос
/ 10 июля 2012

Я тоже столкнулся с этим. Мне нужно было проверить, что определенная функция перенаправляет. В итоге я просто утверждал, что новый URL-адрес перенаправления завершился определенной строкой:

#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]);

Имейте в виду, что юнит-тесты предназначены только для определенного метода. Если вам нужно протестировать несколько перенаправлений, идущих на разные контроллеры / методы, используя что-то вроде селена, а также юнит-тесты для каждого отдельного метода.

1 голос
/ 14 марта 2012

Ну, это может быть потому, что redirect() fn выходит из после выполнения перенаправления (что вам следует делать, когда вы делаете перенаправление, чтобы остановить дальнейшее выполнение кода во время ожидания перенаправления браузера).

/ система / хелперы / 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...