在VS Code中调试PHPUnit测试?

xggvc2p6  于 2023-04-04  发布在  PHP
关注(0)|答案(3)|浏览(233)

我最近配置了VS代码来用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

我使用PHP Debug VS Code扩展。
这是我的launch.json配置:

{
    "name": "Listen for XDebug",
    "type": "php",
    "request": "launch",
    "pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}"
    },
    "port": 9000,
    "log": true
}

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

phpunit --filter myTestMethod path/to/my/test/file/myTest.php

但是当测试运行时,我在测试本身中的一个断点总是被忽略,我不知道为什么。
有没有人遇到过类似的问题?在正常的应用程序请求和单元测试的上下文中,调试的工作方式有什么不同吗?

qacovj5a

qacovj5a1#

当您运行带有绝对路径的单元测试时,您的问题是由于pathMappings设置而发生的,我的建议是将

"pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}"
    },

"pathMappings": {
        "/var/www/mysite.local/": "${workspaceFolder}",
        "${workspaceFolder}": "${workspaceFolder}"
    },

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

thtygnil

thtygnil2#

在我的例子中,phpunit调用了php cli,而后者没有使用我的测试服务器使用的php.ini conf文件,该服务器激活了xdebug。
确保使用了正确的php.ini文件。您可以在使用-c参数调用php时指定它。
您可以通过编辑phpunit的启动脚本将此参数传递给php,该脚本可以在vendor/bin/phpunit.bat(对于Windows)中找到。
文件如下所示:

@ECHO OFF
setlocal DISABLEDELAYEDEXPANSION
SET BIN_TARGET=%~dp0/../phpunit/phpunit/phpunit
php "%BIN_TARGET%" %*

只需在php后面添加-c,并将路径添加到php.ini目录:

php -c PATH_TO_PHP.INI_DIRECTORY "%BIN_TARGET%" %*
5vf7fwbs

5vf7fwbs3#

我必须在运行phpunit的终端会话中指定idekey

XDEBUG_CONFIG="idekey=VSCODE" phpunit --filter myTestMethod path/to/my/test/file/myTest.php

看起来像vscode检查任何设置的idekey值;在我的浏览器中,我的Xdebug助手扩展已经将idekey设置为PHPSTORM,从那里进行调试一直工作得很好

相关问题