🦀

Dockerコンテナ内のPHPUnitをVScodeから動かそうとしたらspawn unknownと戦うことになった

2023/06/13に公開

出てきた症状やエラメ

VSCodeのテストタブから、Laravelのデフォルトで入っているUnitテストを実行したら、ERROR spawn unknownで一生クルクルしてる(✖にもならない)

結論

phpunit拡張のgithubのREADMEとTest Explorerのマーケットプレイスの下側のテンプレを使って、ワークスペースのsetting.jsonを設定すれば解決!

settings.json
{
//コンテナのidはdocker psで出てくる16進数
  "phpunit.command": "docker exec -t "ここにコンテナのid" /bin/sh -c",
  "phpunit.php": "php",
  "phpunit.phpunit": "vendor/bin/phpunit",
  "phpunit.args": [
    "-c",
    "phpunit.xml"
  ],
  "phpunit.paths": {
    // ${pwd} (current directory) is mounted to /app
    //docker-compose.ymlでコンテナに指定したvolumesのパスを右に入れる
    //👇の"/var/www/html"はLaravel Sailのデフォルト値
    "${workspaceFolder}": "/var/www/html", 
    // ${workspaceFolder} is mapped to /app
  },
}

以下日記

詰まるまでの導入

環境

  • Win11
  • VSCode Insidersビルド
  • PHPUnit,Better PHPUnit, PHPUnit Test Explorerの拡張を導入
  • Laravelフレームワーク(PJで使ってる5.x及び比較用に適当に置いた最新版の2つ)

以上の環境を作ったので、さっそくLaravelの/tests/Unitの中に入っているテストのテストを実行してみたところ、

発生した問題

Error spawn unknown というエラメと共に、一生実行し続けている=失敗✖という結果すら出力しない状態

こうなりました。

原因

PHPUnitが存在しないとこういうエラメが出てくるらしい。vendorフォルダには入っていたので、パスの指定がらみで失敗していると分かりました。
もしかしたら違うかも

詰まった理由

デバッグするときの環境というのが、どのような原理で成り立っているかを知らなかったため。
phpunit --versionやって入ってるじゃんってなっていました。

解決方法

トップに書いた通り、公式Docsに有難いことに設定方法が書いてあったので、それを適用したらテスト出来るようになりました。

感想

  • デバッグ環境を構築するのは結構難しく、jsやphpのエラーと戦うよりも苦戦しました。しかもちゃんとテストケースを使ってユニットテストをやっている人が少ないからか類似の記事を探すのに苦労して、エラーメッセージの解決に時間がかかりました。エンジニア🐤の自分からすると、どうして拡張機能入れてポチってボタン押すだけで動かないんだよ!!!!ってなったので、テストケース書かない人が増えるのも分かる気がします。ただ一度環境を作ってさえすれば1クリック或いは定期実行で簡単にテストが出来るようになって、E〇celの面を見なくて済むのは見合ったリターンだと思います。
  • DOCS IS GOD.

Discussion