如何调试使用WordPress-test的WordPress插件的单元测试?

时间:2012-07-12 作者:KajMagnus

我正在尝试调试WordPress插件的单元测试。单元测试使用wordpress测试(和PHPUnit)。然而wordpress-test:

呼叫system(php ...) -如何防止这种情况?

详细信息/澄清:

最初,当我调试单元测试时(例如:$ phpunit --verbose --debug), 然后phpunit连接到端口9000上的Netbeans,一切正常。然而,过了一段时间,wordpress测试运行了一定的bin/install.php 为了建立一个新的WordPress数据库供“单元”测试使用。

但是wordpress测试运行bin/install.php 通过asystem("php ...") 呼叫然后外部php进程再次尝试连接到Netbeans调试器!这会阻塞,因为调试器已经很忙-第一个PHP进程在调试器中打开,运行system(...) 呼叫

问题1为什么第二个PHP进程尝试连接到调试器,尽管我没有指定调试标志?该进程是通过这个PHP调用创建的,没有调试标志,下面是system 电话:

php \'/var/www/wordpress/wp-content/plugins/my-plugin/wordpress-tests/bin/install.php\' \'/var/www/wordpress/wp-content/plugins/my-plugin/wordpress-tests/unittests-config.php\'
如何阻止外部PHP进程连接到调试器?

(完全删除外部系统调用,包括/bin/install.php 相反,直接执行似乎很复杂-存在一些错误,如无法重新声明[某些函数])

(顺便说一下,如果您想使用wordpress测试,请参阅this SO answer.)

2 个回复
最合适的回答,由SO网友:KajMagnus 整理而成

现在我找到了一个解决方案issue 2 我在外部PHP命令前面加了以下前缀:XDEBUG_CONFIG="remote_enable=Off"
然后它没有尝试连接到调试器。

所以,在wordpress-tests/init.php 我更改自:

system( WP_PHP_BINARY . \' \' . escapeshellarg( dirname( __FILE__ ) .
    \'/bin/install.php\' ) . \' \' . escapeshellarg( $config_file_path ) );
收件人:(注意添加了XDEBUG\\u CONFIG行)

$install_blog_cmd =
        \'XDEBUG_CONFIG="remote_enable=Off" \' .
        WP_PHP_BINARY .
        \' \' . escapeshellarg( dirname( __FILE__ ) . \'/bin/install.php\' ) .
        \' \' . escapeshellarg( $config_file_path );
system( $install_blog_cmd );
更新:现在我打开了一个GitHub问题:https://github.com/nb/wordpress-tests/issues/27

更新:Issue 1, 也就是说,为什么system(...) 启动的PHP进程连接回调试器,可能是(?)因为在我的文件中/etc/php5/conf.d/xdebug.ini, 我有这一排:

; Xdebug will always attempt to start a remote debugging session 
; and try to connect to a client, even if the GET/POST/COOKIE
; variable was not present
xdebug.remote_autostart=1

SO网友:dmarges

就我自己而言,配置文件中缺少一个define。

将此定义放在tests目录中的配置文件中,您应该是黄金:

定义(\'WP\\u PHP\\u BINARY\',\'PHP\');

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?