使用 PhpStorm 在 Homestead 环境中调试 PHPUnit 测试

Debugging PHPUnit tests in Homestead environment with PhpStorm

我在 运行 PHP 使用 phpunit.xml 文件进行单元测试时遇到问题。我这样配置远程 PHP 解释器:

此配置允许我调试 PHP Web 应用程序。我在尝试调试 PHPUnit 脚本时遇到问题。我是这样配置的:

有了这样的配置我可以调试PHP单元测试:

问题是我的PHP单元文件没有被读取,我的环境变量也没有被使用。结果,我在测试中遇到了一些错误,例如 CSRF 令牌验证异常。

如何使用我的 phpunit.xml 文件?我可以看到我可以在 PHP 单元配置中添加默认配置文件。我需要在那里指定我的项目目录,而不是 phpunit.xml itself.

我在 PHPUnit 的 Command->handleArguments() 函数中看到只有两种方法可以加载这个文件。我可以指定 phpunit.xml 所在的目录,也可以不使用 --no-configuration 选项。

不幸的是,当我将项目所在的目录指定为 phpunit.xml 的位置时,我失去了调试测试的能力。有趣的是,我仍然可以调试 PHP 单元脚本(例如 Command.php 文件)。

我不想在 IntelliJ (PhpStorm) 中添加 --no-configuration 选项,但是当字段 "Default configuration file" 未被选中时它会自动添加。

如何加载 phpunit.xml 文件而不失去调试测试的能力?

问题是测试 运行 是孤立的。当我们在 PHPUnit 配置中指定 phpunit.xml 文件或项目目录时,会考虑该文件。导致 "detaching" 调试器的原因是 运行 隔离测试。对于 "fix" 这个问题,我们必须将属性 processIsolation 设置为 false:

<?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">
...
</phpunit>