在VS Code中调试PHPUnit测试?

时间:2019-08-24 09:39:31

标签: php visual-studio-code phpunit vscode-debugger

我最近配置了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

但是在测试运行时,我一直在测试中遇到的断点将始终被忽略,我无法弄清原因。

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

2 个答案:

答案 0 :(得分:0)

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

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

使用

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

或在运行单元测试时将其禁用

答案 1 :(得分:0)

在我的情况下,phpunit正在调用php cli,而后者未使用已激活xdebug的测试服务器使用的php.ini conf文件。

确保使用正确的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%" %*