在PHPUnit中生成clover.xml文件时,如何定义相对路径?

6
我正在使用 PHPUnit 在我的 WordPress 插件上运行集成测试,当我生成覆盖率和 `clover.xml` 文件时,`clover.xml` 文件的文件名属性将具有我的文件的绝对路径,例如:
<file name="/Users/denis/vagrant-local/www/project/public_html/wp-content/plguins/my-plugin/file-that-is-tested.php">

由于我需要将此文件发送到SonarQube,因此每次将其发送到SonarQube时,我都需要修改此文件,以便只有相对路径(从wp-config文件夹开始)。

<file name="wp-content/plguins/my-plugin/file-that-is-tested.php">

如果我发送第一个版本,SonarQube将报告代码覆盖率为0.0%,如果我发送另一个版本,它将显示一些覆盖率(与PHPUnit创建的覆盖率不同,但这不重要)。
是否有一种方法可以在PHPUnit配置中指定此文件名属性,还是每次运行测试时都需要运行bash脚本以删除此额外部分?
编辑 phpunit.xml.dist如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit
  backupGlobals="false"
  backupStaticAttributes="false"
  beStrictAboutCoversAnnotation="true"
  bootstrap="tests/bootstrap.php"
  colors="true"
  convertErrorsToExceptions="true"
  convertNoticesToExceptions="true"
  convertWarningsToExceptions="true"
  printerClass="Codedungeon\PHPUnitPrettyResultPrinter\Printer"
  stopOnError="false"
  stopOnFailure="false"
  stopOnIncomplete="false"
  stopOnSkipped="false"
  verbose="true"
  >
  <testsuites>
    <testsuite name="integration">
      <directory prefix="test-" suffix=".php">./tests/integration/</directory>
    </testsuite>
  </testsuites>
  <filter>
    <whitelist>
      <directory>./</directory>
      <exclude>
        <directory>./node_modules</directory>
        <directory>./vendor</directory>
        <directory>./tests</directory>
        <directory suffix=".php">./src/old</directory>
      </exclude>
    </whitelist>
  </filter>
  <logging>
    <log type="coverage-html" target="tests/_reports/coverage" lowUpperBound="35" highLowerBound="80" />
    <log type="coverage-clover" target="tests/_reports/clover.xml"/>
    <log type="coverage-php" target="tests/_reports/logs/coverage.cov"/>
    <log type="junit" target="tests/_reports/logs/logfile.xml"/>
  </logging>
</phpunit>

SonarQube代理程序在哪里运行?您能分享phpunit.xml配置文件中的相关部分吗? - hakre
SonarQube扫描在我的Jenkins机器上进行,但我正在本地运行测试。我将在问题中放置phpunit.xml.dist - dingo_d
2
你找到这个问题的解决方案了吗?我在 Docker 容器中运行测试,所以我也必须操作这些路径。 - Johni
2个回答

2
我创建了一个Symfony命令,基本上只是搜索替换绝对路径的一部分并将其删除。 https://github.com/dingo-d/woo-solo-api/tree/develop/bin 然后您可以在composer脚本中使用它,例如:
    "scripts": {
        "test:coverage": [
            "@php ./vendor/bin/codecept run Integration --coverage --coverage-xml --coverage-html --ansi",
            "@php bin/console clean-coverage /Users/denis.zoljom/Sites/personal/plugins-testing/ --ansi"
        ]
    },

无论您使用哪个套件,第二条命令都将删除coverage.serializedcoverage.xml文件中路径的绝对部分。


0
你可以使用seed linux命令来替换太多的内容。
"test-unit-cover": [
    "phpdbg -qrr vendor/bin/phpunit --configuration tests/config/phpunit-unit-cover.xml --coverage-clover tests/coverage/coverage-unit/coverage.xml --log-junit tests/config/junit.xml -d memory_limit=1024M",
    "sed -i 's+/var/www/html/++g' tests/coverage/coverage-unit/coverage.xml"
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接