以 Clover XML 格式生成代码覆盖率报告...致命错误:无法重新声明 preprocessGrammar()
Posted
技术标签:
【中文标题】以 Clover XML 格式生成代码覆盖率报告...致命错误:无法重新声明 preprocessGrammar()【英文标题】:Generating code coverage report in Clover XML format ... Fatal error: Cannot redeclare preprocessGrammar() 【发布时间】:2021-12-31 19:52:33 【问题描述】:我遇到了错误:Generating code coverage report in Clover XML format ... 致命错误:Cannot redeclare preprocessGrammar()(之前在 /app/vendor/nikic/php-parser/grammar/phpyLang. php:22) 在 /app/vendor/nikic/php-parser/grammar/phpyLang.php 第 22 行
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
cacheResultFile=".phpunit.cache/test-results">
<testsuites>
<testsuite name="default">
<directory>tests</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">.</directory>
</include>
<report>
<clover outputFile="phpunit.coverage.xml"/>
</report>
</coverage>
<logging>
<junit outputFile="phpunit.report.xml"/>
</logging>
</phpunit>
只有在使用测试覆盖率时才会出现此错误。
【问题讨论】:
【参考方案1】:我的错误在这里:
<include>
<directory suffix=".php">.</directory>
</include>
我想覆盖所有文件,它们位于src
和项目的根目录中。
在根目录中有tests
,它们被包含在测试覆盖范围内。它进行了递归调用。
为了解决这个问题,我设置了具体目录 (src
) 和文件 (.php-cs-fixer.
)。我用过这个指令:
<include>
<directory suffix=".php">src</directory>
<directory prefix=".php-cs-fixer.">.</directory>
</include>
我也可以使用<file>
,但我有几个文件,使用directory
对我来说更有用。 https://phpunit.readthedocs.io/en/9.5/configuration.html#the-file-element
<exclude>
指令不适合我。
我的最终配置。
<?xml version="1.0" encoding="UTF-8"?>
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
bootstrap="vendor/autoload.php"
cacheResultFile=".phpunit.cache/test-results">
<testsuites>
<testsuite name="default">
<directory>tests</directory>
</testsuite>
</testsuites>
<coverage processUncoveredFiles="true">
<include>
<directory suffix=".php">src</directory>
<directory prefix=".php-cs-fixer.">.</directory>
</include>
<report>
<clover outputFile="phpunit.coverage.xml"/>
</report>
</coverage>
<logging>
<junit outputFile="phpunit.report.xml"/>
</logging>
</phpunit>
【讨论】:
以上是关于以 Clover XML 格式生成代码覆盖率报告...致命错误:无法重新声明 preprocessGrammar()的主要内容,如果未能解决你的问题,请参考以下文章
Android - Jacoco 无法正确生成 xml 报告(已解决)
如何使用 angular9 和 Jasmine 为所有组件生成 .pdf 格式的单元测试用例代码覆盖率报告