web-dev-qa-db-ja.com

PhpStormを使用してDockerコンテナ内でPHPUnitを実行する

PhpStorm IDEを設定して、Dockerコンテナ内でPHPUnitテストを実行します。

テストのインタープリターとして、ローカルのPHP実行可能ファイル、またはSSHを介した実行可能ファイルの使用に制限されているようです。

PHPコンテナにSSHサービスをインストールできましたが、ちょっとしたハッキン​​グソリューションのように思えます。オンラインの記事では、コンテナにSSHサービスをインストールすることをお勧めしません。

ローカルインタープリターを動作させるために、次のように、コンテナ内でPHPへの呼び出しをプロキシするbashスクリプトを作成してみました。

#!/usr/bin/env bash

# Run PHP through Docker
docker exec -t mycontainer_php_1 php "$@"

これは自分で実行すると完全に機能しますが、PhpStormをローカルPHPインタープリターとして指定すると、有効なPHP実行可能。

それで、これを機能させる良い方法は何ですか?

31
Attila Szeremi

PhpStormが Dockerエンジンとのより良い統合 (Mac用Dockerを含む)になったので、次のことを行うことができます(または この記事を読む ):

コマンドライン:

  1. phpunit Dockerイメージをプルします:_docker pull phpunit/phpunit_
  2. (Macおよび場合によってはWindows)Dockerソケットを_API_URL_:_socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock_にブリッジします

そしてPhpstorm:

  1. Dockerエンジンへの接続を設定:
    • 設定->ビルド、実行、展開-> Dockerに移動します
    • _API URL_を次のように設定して、新しいDocker構成を作成します。
      • Linux:_unix:///var/run/docker.sock_
      • WindowsおよびMac:_http://127.0.0.1:2376_または_tcp://localhost:2376_
  2. リモートインタープリターを設定します:
    • 設定->言語とフレームワーク-> PHPに移動します
    • 新しいPHP CLIインタープリターを作成:
      • _..._をクリックしてから_+_および「リモート...」をクリックします
      • [。= ___。]でDockerを選択します。
        • ServerImage:
        • イメージ名:_phpunit/phpunit:latest_
        • PHP実行可能ファイル:php
  3. Phpunitの設定:
    • 設定->言語とフレームワーク-> PHP-> PHPUnit
    • 新しいPhpunit設定(_+_を作成してから、「リモートインタープリター...」を選択して、
    • _Use Composer Autoloader_を設定
    • スクリプトへのパス:_/opt/project/vendor/autoload.php_
    • デフォルトの構成ファイル:_/opt/project/phpunit.xml.dist_
  4. テストを実行してみてください!
12
grim

これは動作します:

DIR=$(dirname $(readlink -f "$0"))
docker run --rm --sig-proxy=true -v ${DIR}:${DIR} -w ${DIR} --pid=Host php:cli php "$@"

それをいくつかのファイルに入れて、chmod + x it =>ただアイデアでテストし、うまく認識されています:)

すべてのphpstormヘルパースクリプトを実際に動作させるための秘trickは、php実行可能ファイルが存在するディレクトリをマウントすることです。このスクリプトがphpunit実行可能ファイルとソースコードのフォルダーにない場合は、それらもマウントするように拡張する必要があります。

(ここで重要な補足事項:それらは、コンテナとホストobvの同じフォルダにマウントする必要があります:))

数か月後に編集しますが、一部の人にとっては役立つかもしれません。ここでWordPressの例を使用して解決しました: http://original-brownbear.github.io/2015/12 /23/phpunit-docker-phpstorm.html

9
Armin Braun

Dockerコンテナのsshが悪いと聞いたことはありますが、PhpStormはスクリプトをリモートで実行するdockerのexecをサポートしていないので、悪い選択肢ではないと思います。 PhpStorm内でSSHを使用して、リモートphpインタープリターとしてdockerコンテナーをセットアップし、リモートPHPUnit構成をセットアップするだけです。

ここでステップバイステップガイドを見ることができます:
https://mickadoo.github.io/php,phpunit,docker/2016/10/12/phpunit-docker.html

更新:もうSSHを使用する必要はありません。 PhpStormはdockerをサポートするようになりました。リモートインタープリターとしてPHPUnitをインストールしたPHP dockerイメージを使用するだけで、PHP単体テストを実行できます。

0
mickadoo