You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置Scrutinizer后代码覆盖率显示NaN%,如何解决?

解决Scrutinizer显示“coverage NaN%”的问题

我之前也碰到过一模一样的情况,NaN%本质上是Scrutinizer要么没找到你的覆盖率文件,要么没法正常解析它。咱们一步步来排查解决:

  • 先在本地验证覆盖率文件能否正常生成
    先在你本地项目根目录执行一遍vendor/bin/phpunit --coverage-clover=some-file,跑完后检查some-file是否存在,打开看看里面有没有完整的XML结构(要有<coverage>标签,以及具体的类、方法覆盖数据)。如果本地都生成不了有效文件,那Scrutinizer肯定也拿不到数据——这时候得先解决PHPUnit本身的覆盖率生成问题,比如检查phpunit.xml里有没有正确配置覆盖范围,或者是不是有依赖缺失。

  • 核对Scrutinizer配置的文件路径
    确保配置里file: 'some-file'的路径和PHPUnit实际生成的文件路径完全一致。Scrutinizer是在它的构建容器里执行命令的,相对路径的基准是项目根目录,如果你的PHPUnit命令是在子目录里运行的,那生成的文件路径也要对应调整,比如改成subdir/some-file。

  • 查看Scrutinizer的构建日志
    这是最关键的一步!打开你的Scrutinizer项目页面,找到最近的构建记录,点进去看详细日志。你大概率会看到类似“无法读取覆盖率文件”“文件不存在”或者“XML格式错误”的提示——这些直接指向问题根源。比如如果日志说some-file不存在,那要么是PHPUnit命令没执行成功,要么就是路径写错了。

  • 确保构建时依赖被正确安装
    如果Scrutinizer构建过程中没执行composer install,那vendor/bin/phpunit根本不存在,命令自然执行失败,不会生成覆盖率文件。可以在配置里加上依赖安装步骤:

    build:
      dependencies:
        override:
          - composer install --no-interaction --prefer-dist
      tests:
        override:
          - command: 'vendor/bin/phpunit --coverage-clover=some-file'
      coverage:
        file: 'some-file'
        format: 'clover'
    
  • 尝试调整配置的结构化写法
    有时候Scrutinizer更适配结构化的phpunit配置,而非直接写命令,试试改成这种格式:

    build:
      tests:
        override:
          - phpunit:
              configuration: phpunit.xml.dist # 如果你有这个配置文件的话
              coverage:
                file: coverage.xml
                format: clover
    

    这种写法能让Scrutinizer更清晰地处理覆盖率数据,减少路径或命令执行的潜在问题。

  • 检查PHPUnit版本兼容性
    某些旧版本的PHPUnit生成的Clover格式可能和Scrutinizer的解析器不兼容,试试把PHPUnit更新到对应PHP版本的稳定最新版(比如PHP 7.4对应PHPUnit 9.x,PHP 8.x对应PHPUnit 10.x),再重新构建试试。

按这些步骤排查下来,应该就能定位到问题,解决NaN%的显示异常了。

内容的提问来源于stack exchange,提问作者Babak no'doust

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:39:24