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