laravel - Xdebug 断点总是有效,除非使用 @runTestsInSeparateProcesses 时?

标签 laravel netbeans phpunit xdebug netbeans-8

我终于让 Xdebug 可以工作(包括使用断点和“单步执行”的能力)来进行单元测试、功能测试以及在浏览器中进行浏览。

但是,每当我使用@runTestsInSeparateProcesses时因为this reason ,Netbeans 断点不再起作用。

如何在使用 @runTestsInSeparateProcesses 的测试中使用 Xdebug 断点?

我在 Windows 10 版本 1607 内部版本 14393.0 上使用 Netbeans 8.2。 PHPUnit 5.7.21。

我正在运行 Laravel 5.4 Homestead(即 Vagrant 1.9.5),这意味着我的服务器是 Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-66-generic x86_64)。

最佳答案

您需要将 xdebug 配置添加到 php.ini 中,以便 phpunit 再次调用 php 解释器(@runTestsInSeparateProcesses 的 b/c)在单独的进程中运行测试加载并自动激活 xdebug(远程调试设置等),无需传递给可执行文件的任何其他参数。

如果您已经完成了此操作(您的问题可能并非如此),请确保您的 IDE 接受多个 xdebug 连接(xdebug 连接限制或类似连接)。这是必要的,因为新的 PHP 进程将启动需要额外连接的新 xdebug 远程 session 。如果该连接未完成,xdebug 将等待,因此连接限制为一 (1),例如,您将看到 PHP 挂起。

这种方法的缺点是 xdebug 将始终被加载,这会增加 ca.在 CLI 中执行的 PHP 性能提高 10%。

就开发盒而言,您可以自己创建一些脚本,运行该脚本来打开和关闭已安装的 PHP 二进制文件的 xdebug 默认配置。

Composer 不受此影响,因为它将在禁用 xdebug 的情况下重新启动自身,但大多数其他 PHP cli 工具不会执行此操作(并且可能不需要它,因为有太多可用的性能,并且缺点可以被忽略。这对于执行大量对象创建等操作的 PHP 脚本来说非常重要)。

因此,设置 php.ini 并启用 xdebug。一个好的 IDE 会显示它自动添加的设置(PHP cli -d 选项),只需将这些添加到您的 php.ini 中,您应该可以满足该测试场景。

当你让它工作时,考虑如何动态禁用设置(sed 对此很方便,尤其是在 -i [edit In place] 开启的情况下GNU 系统、Stackoverflow 应该能让您对这里的基础知识感到满意,对于 Windows,我不能说什么运行良好,以防万一您想知道)。

附加说明:我不能具体说 Netbeans,因为我不使用它,但是对于 Phpstorm,这完全一样(我善意地假设),因为它在调用测试时将 xdebug 添加到 PHP 配置中(调试、覆盖)和生成的子进程,这会导致其他 PHP 脚本无法调试,除非我将添加的 xdebug 配置放入 php.ini 中。

关于laravel - Xdebug 断点总是有效,除非使用 @runTestsInSeparateProcesses 时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45332246/

相关文章:

php - 嵌套数组验证 laravel

c++ - 尝试编译 C++ 应用程序,找不到头文件

php - 如何使用 phpunit 测试字符串

phpunit - 如何将 PHPUnit 中代码覆盖率的切换点百分比从 90% 更改为 75%?

validation - Laravel 验证规则的关键

php - 我可以创建没有 clientUserId 的收件人 View 吗

java - NetBeans 6.7.1 中的 Unicode

java - 为什么 tomcat 没有在 window 7 的用户帐户中运行?

phpunit - CakePHP 2 代码覆盖率现在显示为 "No files to generate coverage for"

linux - 在 linux apache php 上访问我的网站时突然出现 505 错误