2012-03-28 136 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 ....等等。

我知道這是很多,但它會真正幫助你長期。