Я пытаюсь получить PHP_CodeCoverage Библиотека работает для простейшего случая, чтобы создать отчет о покрытии HTML-кода, и не удалось. У меня установлен PHP и Xdebug. Я бы предпочел не указывать версии тех, которые я использую, потому что я надеюсь, что есть что-то простое, что я пропускаю, но я предоставлю эти детали по запросу. Пока достаточно сказать, что я использую их очень новые версии.
Чтобы сделать это как можно более простым, я разобрал его на 2 файла и до сих пор не могу заставить его делать то, что я хочу. Эти 2 файла — это автоматически созданный vendor / autoload.php, созданный composer при установке библиотеки покрытия, и файл, который использует библиотеку. Этот файл находится на project-root/src/CoverageTest.php
, Файл автозагрузки находится по адресу project-root/vendor/autoload.php
,
Когда я бегу php src/CoverageTest.php
из терминала он генерирует HTML-отчет. Когда я просматриваю отчет, в таблице покрытия кода есть только одна строка, в которой все установлено на «n / a» или «0/0». Он не сообщает о каком-либо покрытии как существующем или отсутствующем. Он ничего не говорит о конкретных файлах, классах, функциях или строках. В значительной степени код, который вы видите в этом тестовом файле, такой же, как и на их README страница. Вот код:
<?php
require __DIR__.'/../vendor/autoload.php';
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage;
$coverage->start('<name of test>');
class MathGenius
{
public function add($first, $second)
{
return $first + $second;
}
}
$guru = new MathGenius();
$sum = $guru->add(1, 1);
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, __DIR__.'/../code-coverage-report');
Он только сообщает о белых файлах и каталогах. Вот как я получил пример, который я отправил на работу. Перед созданием объекта покрытия я создал объект фильтра, например так:
$filter = new \SebastianBergmann\CodeCoverage\Filter();
Так как этот пример только пытался покрыть себя, я внес в этот файл белый фильтр с таким фильтром:
$filter->addFileToWhitelist(__FILE__);
Затем при создании объекта покрытия вы передаете фильтр следующим образом:
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
Вот полный код для фиксированной версии кода из вопроса:
<?php
require __DIR__.'/../vendor/autoload.php';
$filter = new \SebastianBergmann\CodeCoverage\Filter();
$filter->addFileToWhitelist(__FILE__);
$coverage = new \SebastianBergmann\CodeCoverage\CodeCoverage(null, $filter);
$coverage->start('<name of test>');
class MathGenius
{
public function add($first, $second)
{
return $first + $second;
}
}
$guru = new MathGenius();
$sum = $guru->add(1, 1);
$coverage->stop();
$writer = new \SebastianBergmann\CodeCoverage\Report\Html\Facade;
$writer->process($coverage, __DIR__.'/../code-coverage-report');
Других решений пока нет …