我正在尝试熟悉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
我做错了什么?
答案 0 :(得分:1)
标准请求的操作顺序(检查index.php)是:
您在执行过程中劫持了请求并重定向了该过程。您的测试只是遵循该代码,因为它只是执行的一部分。
相反,通过将重定向添加到在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 ....等等。
我知道这很多,但从长远来看,它会对你有所帮助。