在 VS Code 中调试 PHPUnit 测试?

lox*_*boi 10 php phpunit visual-studio-code vscode-debugger

我最近配置了 VS code 以使用 xdebug 调试 PHP。它与我的应用程序代码一起可靠地工作,但是当我使用 PHPunit 运行单元测试时,我的断点被忽略。

我的服务器在一个流浪盒子内运行。

我的php.ini文件包含以下几行:

[xdebug]
zend_extension="/usr/lib/xdebug/xdebug-2.2.7/modules/xdebug.so" 
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=1
xdebug.remote_autostart=1
Run Code Online (Sandbox Code Playgroud)

我使用PHP 调试VS 代码扩展。

这是我的launch.json配置:

{
    "name": "Listen for XDebug",
    "type": "php",
    "request": "launch",
    "pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}"
    },
    "port": 9000,
    "log": true
}
Run Code Online (Sandbox Code Playgroud)

我的单元测试运行良好,例如,从内部/var/www/mysite.local,我可以运行:

phpunit --filter myTestMethod path/to/my/test/file/myTest.php
Run Code Online (Sandbox Code Playgroud)

但是当测试运行时,测试本身中的断点始终被忽略,我无法弄清楚为什么。

有人遇到过类似的问题吗?在正常应用程序请求和单元测试的上下文中调试的工作方式是否有区别?

Mos*_*ang 3

您的问题是由于pathMappings使用绝对路径运行单元测试时的设置而发生的,我的建议是替换

   "pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}"
    },
Run Code Online (Sandbox Code Playgroud)

   "pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}",
        "${workspaceFolder}": "${workspaceFolder}"
    },
Run Code Online (Sandbox Code Playgroud)

或在运行单元测试时禁用它