2011-11-16 3 views
4
젠드 애플리케이션의 모든 테스트들이받은

이 라인 :Zend_Controller_Response_Exception : 헤더를 보낼 수 없습니다.

protected function _getResp() 
{ 
    if (is_null($this->_response)) 
     $this->_response = new Zend_Controller_Response_Http(); 
    return $this->_response; 
} 
....... 
$this->_getResp()->setHeader('Content-Type', 'text/html; charset=utf-8', true); 

는 다음과 같은 오류가 발생하는

Zend_Controller_Response_Exception: Cannot send headers; headers already sent in /usr/share/php5/PEAR/PHPUnit/Util/Printer.php, line 173

을 한 결과 - 테스트 phpunit을 전 출력을 생성하기 때문에

+0

참조 http://stackoverflow.com/questions/190292/phpunit-unit-testing-with-items-that-need-to-send-headers – ManseUK

답변

3

이 발생하지 너의 시험은 심지어 달린다. 테스트 케이스에 Zend_Controller_Response_HttpTestCase을 삽입해야합니다. Zend_Controller_Response_Http의이 하위 클래스는 실제로 헤더를 보내지 않거나 아무 것도 출력하지 않으며 출력이 이미 전송 된 것을 신경 쓰지 않기 때문에 예외를 throw하지 않습니다.

단순히 위의 클래스에 다음 메소드를 추가하십시오.

public function setResp(Zend_Controller_Response_Http $resp) { 
    $this->_response = $resp; 
} 

새로운 Zend_Controller_Response_HttpTestCase을 만들고 테스트하고 개체에 setResp()에 전달합니다. 또한 올바른 헤더가 출력과 함께 "전송"되었음을 확인할 수 있습니다.

+0

나는 이것이 오래되었다는 것을 알고 있지만 어디서해야합니까? 이것을 써라?나는 똑같은 문제가 있지만,이 줄을 어디서 써야하는지에 대한 답을 이해하지 못한다. ControllerTestCase에서도 주 부트 스트랩에서 시도했지만 운이 없다. – Uffo

+0

'Zend_Test_PHPUnit_ControllerTestCase'를 사용하고 있습니까? 'Zend_Controller_Response_HttpTestCase' 응답을'bootstrap()'의 전면 컨트롤러에 주입합니다. –

+0

Uffo의 질문에 대한 답을 아직 볼 수 없습니다. setResp 함수는 어느 파일에 저장됩니까? Zend_Test_PHPUnit_ControllerTestCase에 코드를 추가하려고 시도했지만 작동하지 않았습니다. – blainarmstrong

0

제 경우에는 사용자 지정 요청 및 응답 개체가 있습니다 : My_Controller_Request_RestMy_Controller_Response_Rest.

이 문제를 해결하기 위해 Zend_Controller_Request_HttpTestCaseZend_Controller_Response_HttpTestCase으로 각각 확장되는 My_Controller_Request_RestTestCaseMy_Controller_Response_RestTestCase을 새로 만들었습니다.

David Harkness은 실제로 문제를 해결합니다. 유일한 것은 개체가 각 클래스에 해당하는 HttpTestCase 클래스를 확장해야한다는 것입니다.

개체를 직접 설정할 수 없으므로 각 개체에 대한 설정자를 만들어야합니다.

library/My/Controller/Request/Rest.php

class My_Controller_Request_Rest extends Zend_Controller_Request_Http 
{ 
    // Nothing fancy. 
} 

:

tests/application/controllers/ControllerTestCase.php

abstract class ControllerTestCase extends Zend_Test_PHPUnit_ControllerTestCase 
{ 
    /** 
    * Application instance. 
    * @var Zend_Application 
    */ 
    protected $application; 

    /** 
    * Setup test suite. 
    * 
    * @return void 
    */ 
    public function setUp() 
    { 
     $this->_setupInitializers(); 
     $this->bootstrap = array(
      $this, 
      'applicationBootstrap', 
     ); 
     parent::setUp(); 

     $this->setRequest(new My_Controller_Request_RestTestCase()); 
     $this->setResponse(new My_Controller_Response_RestTestCase()); 
    } 
} 

내 사용자 지정 요청 및 응답 객체가 다음 서명이 :

나는 다음과 같은 ControllerTestCase 코드를

class Bonzai_Controller_Response_Rest extends Zend_Controller_Response_Http 
{ 
    // Nothing fancy either 
} 

자,이 내가 library/My/Controller/Request/Rest.phplibrary/My/Controller/Controller/Request/RestTestCase.php에서 동일한 코드를 반복하지 않도록하는 방법을 알아낼 수없는 것입니다. 코드는 Request/Rest.php와 Request/RestTestCase.php와 Response/Rest.php 및 Response/RestTestCase.php에서 동일하지만, Zend_Controller_(Request|Response)_HttpTestCase을 확장합니다.

내가 분명히했으면 좋겠다. 나는 포스트가 오래되었음을 알고 있지만, 조금 더 연장 할 가치가 있다고 생각합니다.

관련 문제