2012-03-28 5 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. は、あなたが途中で要求をハイジャック

  • SEND_HEADERSを実行します実行してプロセスをリダイレクトします。あなたのテストは、そのコードのすべてが実行されているので、単にそのコードに従います。

    代わりに、send_headersで実行されるリクエストヘッダーにリダイレクトを追加することで、リダイレクトを延期し、あなたのユニットテストでそのコードにヒットしません。あなたの要求::現在の()に置き換え - ユーザーをリダイレクトするための適切な方法で>リダイレクト()行:私はテストするための最良の方法はKohanaの中にリダイレクト考える

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

    ありがとうございました!それは確かに問題でした。今の魅力のように動作します! :) – Emilie

    +0

    実際には、リダイレクトが正しく自分のアプリケーションで発生するために、私は次のリダイレクトラインを使用しなければなりませんでした: $ this-> response-> headers( "Location"、URL :: site(NULL、TRUE) ); – Emilie

    +0

    あなたの提案を含めるために私の答えを修正しました。 – gspatel

    0

    はUnittest_RequestでRequestクラスを拡張することです。

    Locationヘッダーを使用するUnittest_Requestクラスにリダイレクトメソッドを追加します。

    Unittestリクエストを使用して取得要求と送信要求を作成するためのヘルパーメソッドをテストに追加します。

    assertRedirectedTo、assertResponse ....などのアサートメソッドを記述します。

    私はこれがたくさんあることを知っていますが、それは本当に長期的にあなたを助けるでしょう。

    関連する問題