Модульный тест Zend Framework не выполняется на assertResponseCode (200) - PullRequest
0 голосов
/ 16 декабря 2010

Я запускаю тестовый модуль в своем приложении Zend Framework.Что я не могу понять, так это то, что следующий тест не пройден:

public function testCreateFaqItem()
{
    $this->LoginUser();
    $this->dispatch('/faq/admin-faq/create');
    var_dump($this->getResponse());
    $this->assertResponseCode(200);
    $this->assertQueryContentContains('h1', 'Create');
    $this->assertController('admin-faq');
    $this->assertAction('edit');
}

он не пройдет, если на assertResponseCode (200), когда я удалю assertResponseCode (200), тест пройден.Любая помощь будет высоко оценена.

- РЕДАКТИРОВАТЬ -

Дамп объекта ответа:

object(Zend_Controller_Response_HttpTestCase)#1130 (8) {
  ["_body":protected]=>
  array(1) {
    ["default"]=>
    string(0) ""
  }
  ["_exceptions":protected]=>
  array(0) {
  }
  ["_headers":protected]=>
  array(1) {
    [0]=>
    array(3) {
      ["name"]=>
      string(8) "Location"
      ["value"]=>
      string(13) "/user/profile"
      ["replace"]=>
      bool(true)
    }
  }
  ["_headersRaw":protected]=>
  array(0) {
  }
  ["_httpResponseCode":protected]=>
  int(302)
  ["_isRedirect":protected]=>
  bool(true)
  ["_renderExceptions":protected]=>
  bool(false)
  ["headersSentThrowsException"]=>
  bool(true)
}

Спасибо

Ответы [ 3 ]

1 голос
/ 10 мая 2011

В любой из функций модульного тестирования последний параметр всегда является сообщением, которое будет отображаться в случае сбоя теста. Так что для этого примера не нужно делать var_dump. Вместо этого я проверяю код ответа 200:

$this->assertResponseCode(200, 'The response code is ' . $this->getResponse()->getHttpResponseCode());

Это сообщение будет отображаться только в случае неудачи теста и даст мне подсказку о том, что происходит. Делает намного чище код:)

0 голосов
/ 17 декабря 2010

Чтобы решить проблему входа в систему пользователя и проверки кода ответа 200, я вставил $ this-> resetResponse (); после входа в систему пользователя.

public function testCreateFaqItem()
    {
        $this->LoginUser();
        $this->resetResponse();
        $this->dispatch('/faq/admin-faq/create');
        $this->assertResponseCode(200);
        $this->assertQueryContentContains('h1', 'Create');
        $this->assertController('admin-faq');
        $this->assertAction('create');
    }
0 голосов
/ 16 декабря 2010

Вы можете отладить это, сбросив объект ответа и посмотрев как заголовки, так и тело.

// Within your test, before the assertions
var_dump($this->getResponse()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...