Я пытаюсь написать тестовый пример для класса, который управляет заголовками для моего приложения. Среди заголовков, которые он отправляет, есть заголовки статуса http. Я использую headers_list (), чтобы видеть, какие заголовки будут отправлены, если бы я отправил заголовки сейчас. Проблема с headers_list () заключается в том, что она не включает заголовок состояния http (хотя на php.net это недокументировано). Таким образом, я не могу найти способ определить, какой статус http будет отправлен. Даже если я отправляю заголовки (которые я стараюсь не делать, поэтому я могу проверить множество разных вещей за один раз), статус не отображается в headers_list (). Есть идеи?
PS Я понимаю, что могу сделать это, запросив страницу и проанализировав ответ, но это затрудняет проведение тестов на уровне единицы , поэтому я стараюсь избегать этого.
Либо используйте Mock, который возвращает заголовок, но не отправляет его или не записывает объект Response, например
class HttpResponse { protected $_status = '200 OK'; protected $_headers = array(); protected $_body = null; public function setStatus($status) { $this->_status = $status; } public function getStatus() { return $this->_status; } public function addHeader($name, $value) { $this->_headers[$name] = $value; return $this; } public function getHeaders() { return $this->_headers; } public function write($data) { $this->_body .= $data; return $this; } public function send() { header('HTTP/1.0 ' . $this->_status); foreach ($this->headers as $name => $value) { header("$name : $value"); } echo $this->_body; $this->resetRequest(); } public function resetRequest() { $this->_status = '200 OK'; $this->_headers = array(); $this->_body = null; } }
Так что пока вы не send()
вы можете проверить состояние через геттеры. Вы также можете добавить __toString()
, который возвращает Entire Response в виде строки и регулярное выражение, чтобы увидеть, похоже ли оно, как вы ожидаете, чтобы оно выглядело.