PHPUnit和Kohana请求对象

PHPUnit和Kohana请求对象,phpunit,kohana,kohana-3.2,Phpunit,Kohana,Kohana 3.2,我正在努力熟悉Kohana内部的PHPUnit测试。目前,我的代码中的Request::current()->重定向调用似乎有问题 例如,我正在尝试测试登录功能。一旦用户成功登录,我们使用上面的请求重定向行将其重定向到其主页。问题是,当那条线在那里时,测试似乎在那里停止,永远不会返回结果 以下是目前我的测试是如何编写的: class SampleTest extends Kohana_UnitTest_TestCase { protected $session; public function

我正在努力熟悉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

我做错了什么?

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

  • 执行
  • 发送邮件头
  • 身体
  • 你在执行过程中劫持了请求并重定向了进程。您的测试只是遵循该代码,因为它是执行的全部部分

    相反,延迟重定向,将其添加到在send_头中执行的请求头中,这样就不会在unittest中命中该代码。用重定向用户的正确方式替换Request::current()->redirect()行:

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

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

  • 执行
  • 发送邮件头
  • 身体
  • 你在执行过程中劫持了请求并重定向了进程。您的测试只是遵循该代码,因为它是执行的全部部分

    相反,延迟重定向,将其添加到在send_头中执行的请求头中,这样就不会在unittest中命中该代码。用重定向用户的正确方式替换Request::current()->redirect()行:

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

    我认为在Kohana中测试重定向的最佳方法是使用Unittest_请求扩展请求类

    向使用位置头的Unittest_请求类添加重定向方法

    向测试中添加一些帮助器方法,以便使用Unittest请求创建get和post请求

    编写assertRedirectedTo、assertResponse等断言方法。。。。等等


    我知道这很重要,但从长远来看,它确实会对您有所帮助。

    我认为在Kohana中测试重定向的最佳方法是使用Unittest\u请求扩展Request类

    向使用位置头的Unittest_请求类添加重定向方法

    向测试中添加一些帮助器方法,以便使用Unittest请求创建get和post请求

    编写assertRedirectedTo、assertResponse等断言方法。。。。等等


    我知道这很重要,但从长远来看,它确实会对您有所帮助。

    谢谢!这确实是问题所在。现在就像一个魔咒实际上,为了使重定向在我的应用程序中正确发生,我必须使用以下重定向行:$this->response->headers(“Location”,URL::site(NULL,TRUE));修正了我的答案,包括你的建议。谢谢!这确实是问题所在。现在就像一个魔咒实际上,为了使重定向在我的应用程序中正确发生,我必须使用以下重定向行:$this->response->headers(“Location”,URL::site(NULL,TRUE));修正了我的答案,包括你的建议。