1

Zend フレームワークでアプリの単体テストを書き始めました。あたりを見回すと、PHPunit にたどり着き、次に Zend_Test (PHPunit を拡張したもの) にたどり着きました。

そこで、Zend フレームワーク固有のアサーションが得られるので、Zend_Test を使用してテストを作成することにしました...

テストで応答ヘッダーをチェックインするまで、すべてうまくいきました...私の直感は、$this->assertHeader($headerNameToCheckIfItExists)アサーションを使用することでした。残念ながら失敗しました。それで、なぜ失敗するのかを調べ始めました...アプリケーションが応答にヘッダーを設定することを確認し(そして正しく設定すること)、その後curl、生の応答Httpヘッダーで確認しました。アプリケーションによって設定されたヘッダーが応答に存在するようです!

それで、問題は何ですか?

$this->setHeader($headerName, $headerValue)問題は、zend アプリケーションでは、メソッドだけでなくメソッドでもヘッダーを設定できること$this->setRawHeader($headerNameAndHeaderValue)です。キーと値のペアの配列またはプレーン文字列の配列としてそれぞれヘッダーを取得する$this->getHeaders()およびもあります。$this->getRawHeaders()(ソース コードを調べたところ、ヘッダーには 2 つの異なる配列があることがわかりました。1 つはキー値要素を持ち、もう 1 つはプレーンな文字列要素を持ちます)

私のアプリでは、を使用し$this->setRawHeader($headerNameAndHeaderValue)$this->assertHeader($headerNameToCheckIfItExists)失敗しました。使えば失敗$this->setHeader($headerName, $headerValue)$this->assertHeader($headerNameToCheckIfItExists)ない…

そのため$this->assertHeader($headerNameToCheckIfItExists)、!$headerNameToCheckIfItExists$this->getResponse()->getHeaders()

この投稿で、この「欠点」の回答について誰かが知っている場合は、お願いします。

$this->assertHeader($headerNameToCheckIfItExists)私が行った回避策は、テスト ケース ファイルでをオーバーロードすることです。

public function assertHeader($header, $message='') {
    $all_headers = array();
    foreach ($this->getResponse()->getRawHeaders() as $str) {
        $components = explode(":", $str);
        $all_headers[] = array('name' => $components[0],
                'value' => trim($components[1]),
                'replace' => false);
    }
    $all_headers = array_merge($all_headers, $this->getResponse()->getHeaders());

    foreach ($all_headers as $h) 
        if ($h['name'] == $header)
            return $this->assertTrue(true, $message);

    $this->fail('no header with name: '.$header);    
}

私のzendフレームワークのバージョン:

zf show version
Zend Framework Version: 1.10.6
4

0 に答える 0