PHPUnit и объект запроса Kohana - PullRequest
1 голос
/ 28 марта 2012

Я пытаюсь ознакомиться с тестированием PHPUnit в Kohana.В настоящий момент у меня возникают проблемы с запросами перенаправления Request :: current () -> в моем коде.

Например, я пытаюсь проверить функциональность входа в систему.Как только наш пользователь успешно вошел в систему, мы перенаправляем его на домашнюю страницу, используя указанную выше строку перенаправления запроса.Проблема в том, что когда эта строка есть, тест останавливается и никогда не возвращает результаты.

Вот как мои тесты пишутся в данный момент:

class SampleTest extends Kohana_UnitTest_TestCase
{
protected $session;

public function setUp() {
    parent::setUp();
    $this->session = Session::instance();
}

public function testLogin()
{   
    $request = new Request('/login');
    $request->method(HTTP_Request::POST)
        ->post(array('username' => 'username', 'password' => 'password'));
    $request->execute();

    $this->assertEquals($this->session->get('username'), 'password');
 }
}

Если я закомментирую следующую строку в моем контроллере входа, все будет отлично работать:

Request::current()->redirect(); //redirect to home

Что я делаю не так?

Ответы [ 2 ]

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

Порядок операций для стандартного запроса (проверьте ваш index.php):

  1. execute
  2. send_headers
  3. body

Вы перехватили запрос в середине выполнения и перенаправили процесс.Ваш тест просто следует этому коду, поскольку он является частью этого выполнения.

Вместо этого, отложите ваше перенаправление, добавив его в заголовки Request, которые выполняются в send_headers, и вы не попадете в этот код при тестировании модуля.Замените строку Request :: current () -> redirect () на правильный способ перенаправления пользователей:

$this->response->headers("Location", URL::site(NULL, TRUE));
0 голосов
/ 03 апреля 2012

Я думаю, что лучший способ проверить перенаправления в Kohana - это расширить класс Request с помощью Unittest_Request.

Добавьте метод перенаправления в класс Unittest_Request, который использует заголовок Location.

Добавьте в свои тесты несколько вспомогательных методов для создания запросов на получение и публикацию с использованием запросов Unittest.

Напишите методы assert, такие как assertRedirectedTo, assertResponse .... и т. Д.

Я знаю, что это много, но это действительно поможет вам в долгосрочной перспективе.

...