web-dev-qa-db-ja.com

カスタムモジュールのSimpletestをデバッグするにはどうすればよいですか?

PHPStormから、またはコマンドラインを介して、カスタムD8モジュールで(xdebugを使用して)PHPUnitテストをデバッグするのに苦労しています。これは可能ですか?

Acquia Boltで生成されたサイトDrupal-VM で実行しています。XDebugが有効なPHP7を実行している仮想マシンです。このサイトでは、drupalコアおよびすべてのcontribモジュールの依存関係マネージャーとしてcomposer.jsonを使用しています。これは、私がいくつかのことをテストするためのプロジェクトにすぎないため、ここに github repo

これが私のテストクラスです

これが私が試したものです

コマンドライン

次のコマンドを使用して、VMのsshセッション内からテストを実行できます。

$ php core/scripts/run-tests.sh --url http://data.vm --color --verbose --module data_logger

次のコマンドラインからデバッグセッションを開始しようとしました。

$ export XDEBUG_CONFIG="idekey=PHPSTORM remote_enable=1 remote_connect_back=0 remote_mode=req remote_port=9000"; Sudo php core/scripts/run-tests.sh --url http://data.vm --color --verbose --module data_logger

$ Sudo php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=192.168.88.1 -dxdebug.remote_connect_back=0 core/scripts/run-tests.sh --url http://data.vm --color --verbose --module data_logger

注:xdebug変数はすでに設定されているため、コマンドラインでxdebug変数を指定する必要はないと思いますが、私はわらをつかんでいます...

テストは実行されますが、デバッガーセッションはPHPStorm内で開始されないようです。

PHPストーム

PHPStormカスタムモジュールPHPUnitテストの実行が大幅に失敗します

PHPStorm[〜#〜] succeeds [〜#〜]tests/phpunitフォルダー内のBoltに含まれるPHPUnitテストの実行とデバッグ。

PHPUnit設定画面でリモートインタープリターを使用するように設定し、カスタムオートローダーをルートベンダーフォルダーに指定した後/var/www/data/vendor/autoload.php

PHPStorm PHPUnit Remote Interpreter Settings

右クリックして、ファイルの1つで実行/デバッグを選択すると、すべてが期待どおりに機能します。デバッガが起動し、準備が整いました。

コンソールに表示されるコマンドは次のとおりです。

sftp://[email protected]:22/usr/bin/php -dxdebug.remote_enable=1 -dxdebug.remote_mode=req -dxdebug.remote_port=9000 -dxdebug.remote_Host=192.168.88.1 /home/vagrant/.phpstorm_helpers/phpunit.php --no-configuration Drupal\\Tests\\PHPUnit\\BuildTest /var/www/data/tests/phpunit/BuildTest.php

私が目にする主な違いは、これらのテストの範囲がTestBaseであり、私のテストがWebTestBaseを拡張し、ルートレベルのPHPUnitテストに、コピーして更新しようとしたphpunit.xmlファイルが含まれていることです。同様にvendor/autoload.phpをポイントしますが、これは効果がありませんでした。

私が混乱しているのは、PHPStormがtests/phpunit/*がそれらのファイルを右クリックするとPHPUnitテストであることを本質的に理解しているようですが、Testクラスファイルを右クリックすると、JavascriptまたはPHP Script。as PHPStormが私のテストクラスをPHPUnitテストとして認識しないのはなぜですか?

結論として、PHPStormでカスタムモジュールテストをデバッグするにはどうすればよいですか?

追加のコンテキスト:

XdebugがVM=で期待どおりに実行されていることを確認できます。

$ php -i | grep xdebug
/etc/php5/cli/conf.d/20-xdebug.ini,
xdebug
xdebug support => enabled
xdebug.auto_trace => Off => Off
xdebug.cli_color => 0 => 0
xdebug.collect_assignments => Off => Off
xdebug.collect_includes => On => On
xdebug.collect_params => 0 => 0
xdebug.collect_return => Off => Off
xdebug.collect_vars => Off => Off
xdebug.coverage_enable => On => On
xdebug.default_enable => On => On
xdebug.dump.COOKIE => no value => no value
xdebug.dump.ENV => no value => no value
xdebug.dump.FILES => no value => no value
xdebug.dump.GET => no value => no value
xdebug.dump.POST => no value => no value
xdebug.dump.REQUEST => no value => no value
xdebug.dump.SERVER => no value => no value
xdebug.dump.SESSION => no value => no value
xdebug.dump_globals => On => On
xdebug.dump_once => On => On
xdebug.dump_undefined => Off => Off
xdebug.extended_info => On => On
xdebug.file_link_format => no value => no value
xdebug.force_display_errors => Off => Off
xdebug.force_error_reporting => 0 => 0
xdebug.halt_level => 0 => 0
xdebug.idekey => PHPSTORM => PHPSTORM
xdebug.max_nesting_level => 256 => 256
xdebug.max_stack_frames => -1 => -1
xdebug.overload_var_dump => On => On
xdebug.profiler_aggregate => Off => Off
xdebug.profiler_append => Off => Off
xdebug.profiler_enable => Off => Off
xdebug.profiler_enable_trigger => Off => Off
xdebug.profiler_enable_trigger_value => no value => no value
xdebug.profiler_output_dir => /tmp => /tmp
xdebug.profiler_output_name => cachegrind.out.%p => cachegrind.out.%p
xdebug.remote_addr_header => no value => no value
xdebug.remote_autostart => Off => Off
xdebug.remote_connect_back => On => On
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_Host => localhost => localhost
xdebug.remote_log => /tmp/xdebug.log => /tmp/xdebug.log
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000
xdebug.scream => Off => Off
xdebug.show_error_trace => Off => Off
xdebug.show_exception_trace => Off => Off
xdebug.show_local_vars => Off => Off
xdebug.show_mem_delta => Off => Off
xdebug.trace_enable_trigger => Off => Off
xdebug.trace_enable_trigger_value => no value => no value
xdebug.trace_format => 0 => 0
xdebug.trace_options => 0 => 0
xdebug.trace_output_dir => /tmp => /tmp
xdebug.trace_output_name => trace.%c => trace.%c
xdebug.var_display_max_children => 128 => 128
xdebug.var_display_max_data => 512 => 512
xdebug.var_display_max_depth => 3 => 3

テストがadmin/config/development/testingで期待どおりに表示および実行されることを確認できます。

Data Logger PHPUnit SimpleTest

enter image description here

注:Drupal at /admin/config/development/testing)を使用してテストを開始すると、テストを一時停止できます。これは遅く、IDEから切り替えたくないので、理想的なワークフローではありません。 。PHPStorm内またはコマンドラインからテストを開始します。

PHP、デバッグ、PBGpのプロキシ設定もここにあります: PHP Storm - PHP SettingsPHP Storm - Debug SettingsPHP Storm - dbgp-proxy settings

4

PHPStorm用のこのプラグインは、問題を完全に解決します。 https://www.previousnext.com.au/blog/native-phpstorm-drupal-test-runner#comment-1588

https://github.com/mglaman/intellij-drupal-run-tests

または、このプラグインにより、PHPスクリプトの実行/デバッグ構成でも同じことを実行できることを認識しました。

PHPStorm - PHP Script Run/Debug Configuration

基本的に、引数フィールドに以下を追加するだけです:--php /usr/bin/php --url http://webny.dev --dburl mysql://drupal:[email protected]/drupal --concurrency 1 --module simpletest_example

あなたのデータベース設定とモジュール/クラス/ファイルのために強引に変更する

1