2010-12-16 20 views
0

Zend Frameworkアプリケーションでユニットテストを実行しています。私が理解して傾けると、次のテストが失敗したということです。Zend FrameworkユニットテストがassertResponseCode(200)で失敗する

public function testCreateFaqItem() 
{ 
    $this->LoginUser(); 
    $this->dispatch('/faq/admin-faq/create'); 
    var_dump($this->getResponse()); 
    $this->assertResponseCode(200); 
    $this->assertQueryContentContains('h1', 'Create'); 
    $this->assertController('admin-faq'); 
    $this->assertAction('edit'); 
} 

それは私がassertResponseCode(200)を取り外しassertResponseCode(200)、上で、テストに合格した場合は失敗します。どんな助けでも大歓迎です。

- EDIT -

Responseオブジェクトのダンプ:

object(Zend_Controller_Response_HttpTestCase)#1130 (8) { 
    ["_body":protected]=> 
    array(1) { 
    ["default"]=> 
    string(0) "" 
    } 
    ["_exceptions":protected]=> 
    array(0) { 
    } 
    ["_headers":protected]=> 
    array(1) { 
    [0]=> 
    array(3) { 
     ["name"]=> 
     string(8) "Location" 
     ["value"]=> 
     string(13) "/user/profile" 
     ["replace"]=> 
     bool(true) 
    } 
    } 
    ["_headersRaw":protected]=> 
    array(0) { 
    } 
    ["_httpResponseCode":protected]=> 
    int(302) 
    ["_isRedirect":protected]=> 
    bool(true) 
    ["_renderExceptions":protected]=> 
    bool(false) 
    ["headersSentThrowsException"]=> 
    bool(true) 
} 

おかげ

+0

実際の応答コードは何ですか?私は、実際の応答コードが302であることがわかっていない、全く分からなぜ:( – ircmaxell

+0

- それはリダイレクトだ理由を示している可能性があります応答オブジェクトに私の他に302 –

答えて

0

ユーザーにログインする際の問題を修正し、応答コード200をテストするために、$ this-> resetResponse();を挿入しました。ユーザーにログインした後

public function testCreateFaqItem() 
    { 
     $this->LoginUser(); 
     $this->resetResponse(); 
     $this->dispatch('/faq/admin-faq/create'); 
     $this->assertResponseCode(200); 
     $this->assertQueryContentContains('h1', 'Create'); 
     $this->assertController('admin-faq'); 
     $this->assertAction('create'); 
    } 
0

あなたはレスポンスオブジェクトをダンプし、ヘッダとボディの両方を見て、これをデバッグすることができます。

// Within your test, before the assertions 
var_dump($this->getResponse()); 
+0

私はます$ this->てgetResponse()を使用 –

+0

何も与えなかった> getHeaders()は、?リクエストオブジェクトを見てみましょう、すべてが右に見えることを確認してください。 –

+0

私は、他の一つは、常に私は –

1

ユニットテスト機能のいずれかを使用すると、最後のパラメータは常に、テストが失敗した場合に表示されるメッセージです。したがって、この例では、var_dumpを実行する必要はありません。テストが失敗し、起こっていただきましたし、私に手掛かりを与える場合は、メッセージのみが表示されます

$this->assertResponseCode(200, 'The response code is ' . $this->getResponse()->getHttpResponseCode()); 

:代わりに、これは私が200の応答コードをテストする方法です。はるかにクリーンなコードを作成します:)

関連する問題