Необработанный PHP в тестовом ответе PHPUnit

Мне удалось настроить 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

person Luke    schedule 17.08.2011    source источник
comment
Используете ли вы короткие теги (‹??› Или ‹? =?›) В этом исходном коде, который выводится? Если ваш сервер не настроен для коротких тегов php, он не будет обрабатывать их как PHP, и вы получите проблему, аналогичную этой   -  person Ben Brocka    schedule 17.08.2011


Ответы (1)


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

person Marc B    schedule 17.08.2011
comment
Спасибо за ответ. Частично проблема в том, что он не проходит через веб-сервер, поэтому он не отображается в моих журналах. Оказалось, что у меня были отключены ошибки, а необработанный PHP был результатом ошибки в коде, которую я не нашел, пока не включил ошибки. Тесты сейчас работают. - person Luke; 18.08.2011