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

Posted

技术标签:

【中文标题】使用 PhpStorm 在 Homestead 环境中调试 PHPUnit 测试【英文标题】:Debugging PHPUnit tests in Homestead environment with PhpStorm 【发布时间】:2017-12-20 02:48:37 【问题描述】:

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

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

通过这样的配置,我可以调试 PHPUnit 测试:

问题是我的 PHPUnit 文件没有被读取并且我的环境变量没有被使用。结果,我在测试中遇到了一些错误,例如 CSRF Token Validation 异常。

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

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

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

我不想在 IntelliJ (PhpStorm) 中添加--no-configuration 选项,但是当未选择“默认配置文件”字段时会自动添加。

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

【问题讨论】:

您是否尝试将其设置为 File | 中的默认配置文件?设置 |语言和框架 | PHP |测试框架 > 你的远程 PHPUnit 配置? 【参考方案1】:

问题是测试是单独运行的。当我们在 PHPUnit 配置中指定 phpunit.xml 文件或项目目录时,会考虑该文件。导致“分离”调试器的原因是孤立地运行测试。要“修复”问题,我们必须将属性 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>

【讨论】:

或者在该 VM 上配置 PHP 以启用 xdebug。另请参阅关于该部分的类似问题:***.com/q/45332246/367456

以上是关于使用 PhpStorm 在 Homestead 环境中调试 PHPUnit 测试的主要内容,如果未能解决你的问题,请参考以下文章

在 PhpStorm 中为 Laravel Homestead vagrant VM 运行测试

PHPStorm + Homestead + Xdebug + Chrome Xdebug Helper 调试配置

本地xdebug调试搭建 Laravel+homestead+phpstorm

迁移到 Homestead 后在 PhpStorm 中为 Laravel 运行测试

laravel 5 只有根路由有效

下载Homestead并离线安装Homestead