Покрытие кода PHPUnit / Xdebug для вызовов Codeigniter API - PullRequest
2 голосов
/ 26 марта 2011

Мы используем Codeigniter и имеем 2 варианта вызова наших контроллеров API:

  1. мы можем использовать клиент, который вызывает URL контроллера через Curl,
  2. мы можем использовать клиент, который вызывает контроллер из командной строки.

Это прекрасно для функциональности нашего сайта. Однако, когда я запускаю PHPUnit, отчеты о покрытии для контроллеров остаются пустыми, а отчеты о покрытии для всех моделей корректны.

При отслеживании того, как xdebug создает отчеты, выясняется, что использование клиента на основе Curl или клиента CLI вызывается вне области действия тестовой функции, поэтому xdebug_get_code_coverage () не отслеживает код контроллера, который выполняется.

Можно ли настроить xdebug для распознавания покрытия кода в этом сценарии? Можно ли вызывать контроллеры Codeigniter в рамках тестовой функции PHPUnit? Есть ли другие возможные решения?

Ответы [ 2 ]

1 голос
/ 30 апреля 2011

Да, это легко возможно. См. http://www.phpunit.de/manual/current/en/selenium.html для получения дополнительной информации об этом

По сути, вы помещаете некоторые специальные файлы в ваш веб-корень:

PHPUnit_Extensions_SeleniumTestCase может собирать информацию о покрытии кода для тестов, выполняемых через Selenium: Скопируйте PHPUnit/Extensions/SeleniumTestCase/phpunit_coverage.php в корневой каталог документов вашего веб-сервера. В файле конфигурации вашего веб-сервера php.ini настройте PHPUnit/Extensions/SeleniumTestCase/prepend.php и PHPUnit/Extensions/SeleniumTestCase/append.php как auto_prepend_file и auto_append_file соответственно. В вашем классе теста, который расширяет PHPUnit_Extensions_SeleniumTestCase, используйте защищенный $ coverScriptUrl = 'http://host/phpunit_coverage.php'; настроить URL для скрипта phpunit_coverage.php.

При запуске URL с параметром GET PHPUNIT_SELENIUM_TEST_ID информация о покрытии отслеживается, и PHPUnit может собирать ее, запрашивая coverageScriptUrl.

0 голосов
/ 26 марта 2011

Альтернатива: см. Наш SD PHP Test Coverage инструмент.

Он не использует xdebug для сбора данных о покрытии, поэтому у него не будет особых проблем с xdebug. Это инструмент сценария для сбора данных о тестовом покрытии; После инструментирования, независимо от того, как выполняется скрипт, вы получите данные тестового покрытия. (Инструментарий является временным; вы выбрасываете инструментированный код, как только собранные данные о тестовом покрытии, поэтому они не влияют на вашу базу производственного кода). Этот подход требует явного перечисления всех сценариев PHP, для которых вы хотите получить данные покрытия; Вы можете игнорировать некоторые, если хотите. Обычно это не стоит беспокоиться; большинство пользователей просто перечисляют все сценарии PHP.

...