Symfony 3.4 - Можем ли мы собрать покрытие кода для функционального тестирования?
Я использую Symfony 3.4 для некоторых наших проектов. Согласно документации, мы должны написать функциональные тесты для наших контроллеров. Однако, похоже, что мы не можем собрать покрытие кода для функционального тестирования, потому что symfony будет запускать основной код в других процессах PHP.
- В процессе phpunit:
var_dump(xdebug_code_coverage_started()) => true
- В коде контроллера:
var_dump(xdebug_code_coverage_started()) => false
,
ОБНОВЛЕНИЕ: Кажется, что проблема возникает, только когда я помещаю тесты в отдельную папку src
папка. Работает, когда я помещаю тесты в одну и ту же папку (src/MyBubndle/Tests
)
Конфигурация PHP-модуля
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.0/phpunit.xsd"
backupGlobals="false"
colors="true"
processIsolation = "false"
bootstrap="vendor/autoload.php"
>
<php>
<ini name="error_reporting" value="-1" />
<server name="KERNEL_DIR" value="app/" />
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
<!--<env name="KERNEL_CLASS" value="App\Kernel" />-->
<env name="APP_ENV" value="test"/>
<env name="APP_DEBUG" value="1"/>
<env name="SYMFONY_ENV" value="test"/>
<env name="MYSQL_SERVER" value="127.0.0.1"/>
<env name="MYSQL_DATABASE" value="db"/>
<env name="MYSQL_USER" value="root"/>
<env name="MYSQL_PASSWORD" value="root"/>
<env name="MYSQL_PORT" value="3306"/>
<env name="JWT_PUBLIC_KEY_PATH" value="jwt/public.pem"/>
<env name="SYMFONY_PHPUNIT_VERSION" value="6.5.5"/>
</php>
<testsuites>
<testsuite name="Project Test Suite">
<directory suffix="Test.php" >.</directory>
<exclude>vendor</exclude>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">.</directory>
<exclude>
<directory>src/*Bundle/Resources</directory>
<directory>src/*/*Bundle/Resources</directory>
<directory>src/*/Bundle/*Bundle/Resources</directory>
<directory>app</directory>
<directory>bin</directory>
<directory>docker</directory>
<directory>jwt</directory>
<directory>var</directory>
<directory>vendor</directory>
<directory>web</directory>
<directory>tests</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./var/logs/codeCoverage" charset="UTF-8"
yui="true" highlight="true"
lowUpperBound="50" highLowerBound="80"/>
<log type="coverage-text" target="php://stdout" showOnlySummary = "true" showUncoveredFiles="false"/>
<log type="testdox-html" target="./var/logs/testdox.html" />
<log type="junit" target="./var/logs/testreport.xml" logIncompleteSkipped="false"/>
<log type="coverage-clover" target="./var/logs/coverage.xml"/>
</logging>
<!--<listeners>-->
<!--<listener class="Symfony\Bridge\PhpUnit\CoverageListener" />-->
<!--</listeners>-->
</phpunit>
Также попробовал:
<?xml version="1.0" encoding="UTF-8"?>
<!-- https://phpunit.de/manual/current/en/appendixes.configuration.html -->
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://schema.phpunit.de/6.0/phpunit.xsd"
backupGlobals="false"
colors="true"
processIsolation = "false"
bootstrap="vendor/autoload.php"
>
<php>
<ini name="error_reporting" value="-1" />
<server name="KERNEL_DIR" value="app/" />
<env name="SYMFONY_DEPRECATIONS_HELPER" value="weak"/>
<!--<env name="KERNEL_CLASS" value="App\Kernel" />-->
<env name="APP_ENV" value="test"/>
<env name="APP_DEBUG" value="1"/>
<env name="SYMFONY_ENV" value="test"/>
<env name="MYSQL_SERVER" value="127.0.0.1"/>
<env name="MYSQL_DATABASE" value="db"/>
<env name="MYSQL_USER" value="root"/>
<env name="MYSQL_PASSWORD" value="root"/>
<env name="MYSQL_PORT" value="3306"/>
<env name="JWT_PUBLIC_KEY_PATH" value="jwt/public.pem"/>
<env name="SYMFONY_PHPUNIT_VERSION" value="6.5.5"/>
</php>
<testsuites>
<testsuite name="Project Test Suite">
<directory suffix="Test.php" >./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory suffix=".php">./src</directory>
<exclude>
<directory>src/*Bundle/Resources</directory>
<directory>src/*/*Bundle/Resources</directory>
<directory>src/*/Bundle/*Bundle/Resources</directory>
</exclude>
</whitelist>
</filter>
<logging>
<log type="coverage-html" target="./var/logs/codeCoverage" charset="UTF-8"
yui="true" highlight="true"
lowUpperBound="50" highLowerBound="80"/>
<log type="coverage-text" target="php://stdout" showOnlySummary = "true" showUncoveredFiles="false"/>
<log type="testdox-html" target="./var/logs/testdox.html" />
<log type="junit" target="./var/logs/testreport.xml" logIncompleteSkipped="false"/>
<log type="coverage-clover" target="./var/logs/coverage.xml"/>
</logging>
<!--<listeners>-->
<!--<listener class="Symfony\Bridge\PhpUnit\CoverageListener" />-->
<!--</listeners>-->
</phpunit>
Есть ли обходной путь для этого без использования других рамок тестирования?
Все подсказки высоко ценятся!