Сырой PHP в PHPUnit тестовый ответ - PullRequest
2 голосов
/ 17 августа 2011

Мне удалось установить PHPUnit с моим проектом Zend Framework, используя Phing для выполнения тестов во время сборки с помощью внешнего инструмента Eclipse. Мои тесты обнаруживаются и выполняются во время сборки, но по какой-то причине PHP на страницах не интерпретируется.

Чтобы выяснить, почему мои утверждения не сработали, я добавил: echo $this->response->outputBody(); к своему тесту и понял, что он повторяет необработанный PHP. Если я добавлю echo get_class($this->response);, я получу Zend_Controller_Response_HttpTestCase в качестве имени класса, что из того, что я собираю, является правильным.

У меня была эта проблема с Apache, где обработчики файлов не были настроены для отправки кода PHP через исполняемый файл PHP, но, насколько я знаю, это не должно быть проблемой, так как Phing / PHPUnit должен обрабатывать выполнение всего через исполняемый файл напрямую. Я еще недостаточно знаю, как работает PHPUnit или Phing, чтобы понять, что я могу делать неправильно. Есть предложения?

Вот мой тестовый класс:

<?php

class SearchControllerTest extends ControllerTestCase
{

    public function setUp()
    {
        parent::setUp();
    }

    public function testSearchPizzaChicago()
    {
        $this->_search('restaurants', 'chicago, il');
    }


    private function _search($what, $where)
    {
        $this->request->setMethod('POST');

        $this->request->setPost(
                        array(
                            'search_what' => $what,
                            'search_where' => $where,
                        )
        );

        $this->dispatch(Zend_Registry::get('base_url') . '/search/results');

        echo $this->response->outputBody();

        //echo get_class($this->response);

        $this->assertQuery('#results');
    }

    public function tearDown()
    {
        /* Tear Down Routine */
    }


}

Вот мой вывод на консоль при запуске одного из тестов:

Buildfile: C:\workspace\myproject\build.xml

myproject > test:

... raw PHP code here ...

  [phpunit] Testsuite: SearchControllerTest
  [phpunit] Tests run: 1, Failures: 1, Errors: 0, Incomplete: 0, Skipped: 0, Time elapsed: 0.25874 s
  [phpunit] testSearchPizzaChicago FAILED
  [phpunit] Failed asserting node DENOTED BY #results EXISTS
  [phpunit] C:\workspace\frameworks\ZendFramework-1.11\library\Zend\Test\PHPUnit\Constraint\DomQuery.php:263
  [phpunit] C:\workspace\frameworks\ZendFramework-1.11\library\Zend\Test\PHPUnit\ControllerTestCase.php:300
  [phpunit] C:\workspace\myproject\tests\application\controllers\SearchControllerTest.php:34
  [phpunit] C:\workspace\myproject\tests\application\controllers\SearchControllerTest.php:13
  [phpunit] C:\wamp\bin\php\php5.3.5\PEAR\phing.php:37

BUILD FINISHED

Total time: 2.0895 seconds

1 Ответ

1 голос
/ 17 августа 2011

Вы делаете запрос POST - если ваш веб-сервер работает правильно, он НИКОГДА не будет обслуживать необработанный код PHP. Проверьте сценарий /search/results, чтобы увидеть, выполняется ли он на самом деле. Поскольку вы получаете php-код, скорее всего, он НЕ рассматривается / обрабатывается как php-скрипт, а его содержимое обрабатывается как обычный текст.

...