eit*_*hed 17 php phpunit xdebug laravel-5.5
我真的很不知道发生了什么 - 这一切都始于PHPUnit Error: No code coverage driver is available在尝试运行测试覆盖率报告时的错误,最后我调试到下面描述的可复制集.但要设置阶段 - 我使用的是Laravel 5.5,Xdebug 2.5.5,PHPUnit 6.5.5.我的测试代码说明了这个问题:
<?php
use Tests\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出 C:\Users\xxx\AppData\Local\Temp\7598.tmp
将它与输出正确的php.ini路径的代码进行比较:
<?php
use PHPUnit\Framework\TestCase;
class A extends TestCase
{
public function testA()
{
echo( get_cfg_var('cfg_file_path')); exit;
}
}
Run Code Online (Sandbox Code Playgroud)
输出: C:\server\php\php.ini
怎么会这样?加载的php.ini文件如何根据执行的代码进行更改?更好的是 - 如何加载我正确的php.ini文件(启用了xdebug),而不是这个冒号?
在这两种情况下,测试都是使用 phpunit tests\unit\a
文件夹结构是:
Laravel Project
????tests
????Unit
????A.php
Run Code Online (Sandbox Code Playgroud)
eit*_*hed 11
我们已将其追溯到Composer XdebugHandler.php::writeTmpIni功能所在的问题vendor\composer\composer\src\Composer\XdebugHandler.php.
显然在应用程序初始化期间,一个单独的php进程是临时生成的php.ini,并且对于那个php进程是传递给它的测试,但为什么它这样做是因为目前超出了我.
将在Laravel的bugtracker上标记它如何处理这个问题.
添加Composer作为一个包(在我的例子中)larapack/hooks的依赖性本身就是一个依赖larapack/voyager-hooks,它本身就是Voyager的依赖.
据我所知,在Laravel应用程序初始化期间,不应触发此行为(为什么要初始化不需要的依赖项,至少是明确的).为什么Composer在那个阶段触发自己也超出了我的想象.
我们应用的解决方案是添加:
<php>
<env name="COMPOSER_ALLOW_XDEBUG" value="1"/>
</php>
Run Code Online (Sandbox Code Playgroud)
在phpunit.xml文件中
我现在提交了这个问题:https://github.com/laravel/framework/issues/22782
关于GitHub的讨论,它是由Laravel 5.5的变化引起的,涉及处理服务提供商(https://laravel.com/docs/5.5/packages#package-discovery).它是如何更新的,我不知道 - 对我来说这是5.4和5.5之间的变化值得在升级中注意(但请阅读Github上发生的讨论,并就此事做出自己的决定); 说实话,报告这个问题在我的嘴里留下了酸味,我不会进一步追求它.
larapack/voyager-hooks关于处理5.5中引入的服务提供商发现,我也提出了一个问题- https://github.com/larapack/voyager-hooks/issues/16
这已经修复了 larapack/hooks:v1.0.3
| 归档时间: |
|
| 查看次数: |
361 次 |
| 最近记录: |