2012-03-28 153 views
1

我试图熟悉Kohana中的PHPUnit测试。目前,我似乎遇到了Request :: current() - >在我的代码中重定向调用的问题。PHPUnit和Kohana请求对象

例如,我试图测试登录功能。一旦我们的用户成功登录,我们使用上面的请求重定向行将其重定向到其主页。问题是,当那条线在那里时,测试似乎停在那里,永远不会返回结果。

这里是我的测试是如何在此刻写着:

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 

我在做什么错?

回答

1

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

  1. 执行
  2. send_headers

你劫持的中间请求你的执行和重定向过程。您的测试只是遵循该代码,因为它是该执行的所有部分。

取而代之的是,将您的重定向添加到在send_headers中执行的请求头中,并且您不会在单元测试中击中该代码。更换你支持::电流() - >重定向()以适当的方式向行重定向用户:

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

谢谢!这确实是个问题。现在就像一个魅力! :) – Emilie 2012-03-31 02:38:45

+0

实际上,为了使重定向在我的应用程序本身中正确发生,我必须使用以下重定向行: $ this-> response-> headers(“Location”,URL :: site(NULL,TRUE) ); – Emilie 2012-03-31 03:25:41

+0

修复了我的答案,包括您的建议。 – gspatel 2012-04-05 16:31:13

0

我认为测试的最佳途径重定向在Kohana的是一个Unittest_Request扩展请求类。

将重定向方法添加到使用位置标题的Unittest_Request类。

向测试中添加一些帮助器方法,以使用Unittest请求创建获取和发布请求。

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

我知道这是很多,但它会真正帮助你长期。