PHPUnit和Kohana请求对象

时间:2012-03-28 00:36:58

标签: phpunit kohana kohana-3.2

我正在尝试熟悉Kohana中的PHPUnit测试。目前,我似乎在我的代码中遇到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 个答案:

答案 0 :(得分:1)

标准请求的操作顺序(检查index.php)是:

  1. 执行
  2. send_headers
  3. 您在执行过程中劫持了请求并重定向了该过程。您的测试只是遵循该代码,因为它只是执行的一部分。

    相反,通过将重定向添加到在send_headers中执行的Request标头来推迟重定向,并且您不会在unittest中触及该代码。使用重定向用户的正确方法替换您的Request :: current() - > redirect()行:

    $this->response->headers("Location", URL::site(NULL, TRUE));
    

答案 1 :(得分:0)

我认为在Kohana中测试重定向的最佳方法是使用Unittest_Request扩展Request类。

将重定向方法添加到使用Location标头的Unittest_Request类。

为测试添加一些辅助方法,以使用Unittest请求创建get和post请求。

编写断言方法,如assertRedirectedTo,assertResponse ....等等。

我知道这很多,但从长远来看,它会对你有所帮助。