我正在开发一个 Laravel 包,一些类是由包通过控制台命令生成的 - 即它们不存在于包本身中,但将被创建并放置在 users
app/Models
目录中。我已经为这些创建了 Fixtures,这样我就可以有效地测试生成的类,但我不确定如何让它们在代码覆盖率中被拾取。
我尝试修改我的 phpunit.xml 以包含这些作为源:
<phpunit ...>
...
<source>
<include>
<directory suffix=".php">./src</directory>
<directory suffix=".php">./tests/Fixtures/app/Models</directory>
</include>
</source>
...
</phpunit>
但这似乎并不能解决问题。
目前,我的作曲家有以下内容:
...
"autoload": {
"psr-4": {
"Me\\MyPackage\\": "src/"
},
"files": [
"src/helpers.php"
]
},
"autoload-dev": {
"psr-4": {
"Tests\\": "tests/",
"Tests\\Fixtures\\App\\": "tests/Fixtures/app"
}
},
...
我尝试将
"Tests\\Fixtures\\App\\": "tests/Fixtures/app"
移至 autoload.psr-4
但没有任何乐趣。我的想法是,当运行 composer dump-autoload
时,这些将包含在 Laravel 的引导中。另外,我不确定这是否是正确的方法,因为这些文件纯粹用于测试,不应通过包提供。 (现在认为需要创建一个自定义引导文件来包含我的常规包类和我的装置?我不确定这是否是正确的方法,但更多的是一种黑客行为。)
目前,我的灯具未包含在承保范围内,理想情况下我希望将它们包含在内。
任何帮助表示赞赏。
事实证明
coverage/include
元素从 10.1 开始已被弃用。我的 phpunit.xml 有
...
<coverage pathCoverage="true">
<include>
<directory suffix=".php">./src</directory>
</include>
</coverage>
...
只需更改为:
...
<coverage pathCoverage="true">
</coverage>
...
上面的sources
元素选择了覆盖范围的字段,但没有包含我想要的字段,尽管已添加到
<source>
中。似乎虽然已弃用,但
<coverage>
覆盖了这一点。