在当前的项目中,我们一直在努力为Laravel 5.3应用程序保持100%的测试覆盖率。前几天我发现了一些奇怪的东西。由于某种原因,在控制器中,任何未运行的代码都不会被标记为缺少测试。但是,如果我向模型添加一个函数而忘记编写一个测试,就会显示为缺少测试的代码。以下是模型的示例代码覆盖率报告:
以下是控制器的示例代码覆盖率报告:
您可以在功能测试中看到我测试在顶部调用destroy()
函数的端点,但是我忘了为调用answer()
的端点编写测试。为什么这不会被标记为未涵盖的代码?
简单地运行:
phpunit --coverage-html ./storage/logs/phpunit
此处还有我的phpunit.xml
文件:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="bootstrap/autoload.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false">
<testsuites>
<testsuite name="Application Test Suite">
<directory suffix="Test.php">./tests</directory>
</testsuite>
</testsuites>
<filter>
<whitelist processUncoveredFilesFromWhitelist="true">
<directory suffix=".php">./app</directory>
</whitelist>
</filter>
</phpunit>
更新:
我想我可能已经找到了解决问题的方法。在phpunit.xml
更改processUncoveredFilesFromWhitelist="true"
至false
。不可思议的是,测试运行时间大约是运行时间的3倍,但它似乎标记了所有未执行的内容。