Как использовать библиотеку PHP_CodeCoverage напрямую?

Я пытаюсь получить 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');

1

Решение

Он только сообщает о белых файлах и каталогах. Вот как я получил пример, который я отправил на работу. Перед созданием объекта покрытия я создал объект фильтра, например так:

$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');
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]