Контроллер ошибок UnitTest в Zend Framework - PullRequest
5 голосов
/ 04 декабря 2010

Я фанат 100% покрытия кода, но я не знаю, как проверить ErrorController в Zend Framework.

Нет проблем проверить действие 404 и действие ошибки:

    public function testDispatchErrorAction()
    {
        $this->dispatch('/error/error');
        $this->assertResponseCode(200);
        $this->assertController('error');
        $this->assertAction('error');
    }

    public function testDispatch404()
    {
        $this->dispatch('/error/errorxxxxx');
        $this->assertResponseCode(404);
        $this->assertController('error');
        $this->assertAction('error');
    }

Но как проверить на ошибку приложения (500)? может мне нужно что-то подобное?

public function testDispatch500()
{
    throw new Exception('test');

    $this->dispatch('/error/error');
    $this->assertResponseCode(500);
    $this->assertController('error');
    $this->assertAction('error');

}

Ответы [ 2 ]

1 голос
/ 15 июня 2012

Это старый вопрос, но я боролся с этим сегодня и не мог найти хорошего ответа где-либо еще, поэтому я продолжу и напишу, что я сделал, чтобы решить эту проблему.Ответ на самом деле очень прост.

Направьте вашу отправку на действие, которое приведет к исключению.

Мое приложение выдает ошибку, когда запрос get сделан в конечную точку JSON,поэтому я использовал один из них, чтобы проверить это.

   /**
   * @covers  ErrorController::errorAction
   */
    public function testErrorAction500() {
        /**
         * Requesting a page that doesn't exist returns the proper error message 
         */
        $this->dispatch('/my-json-controller/json-end-point');
        $body = $this->getResponse()->getBody();
        $this->assertResponseCode('500');
        $this->assertContains('Application error',$body);
    }

В качестве альтернативы, если вы не возражаете против действия только для тестирования, вы можете просто создать действие, которое только вызывает ошибку и указывает на это действие.в вашем модульном тесте.

public function errorAction() {
    throw new Exception('You should not be here');
}

Тогда ваш тест будет выглядеть так:

   /**
   * @covers  ErrorController::errorAction
   */
    public function testErrorAction500() {
        /**
         * Requesting a page that doesn't exist returns the proper error message 
         */
        $this->dispatch('/my-error-controller/error');
        $body = $this->getResponse()->getBody();
        $this->assertResponseCode('500');
        $this->assertContains('Application error',$body);
    }
0 голосов
/ 04 декабря 2010

Ну, я не очень знаком с этой темой, но я бы манипулировал этим поведением с помощью специального плагина ErrorHandler (расширил оригинал и сделал вид, что было сгенерировано исключение). Возможно, можно зарегистрировать его только для одного теста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...