问题描述
我当前的设置是:PHPStorm,Docker WSL,Ubuntu(WSL)。我所有的项目文件都是本地的,并且在WSL Ubuntu中。在PHPStorm上设置了Docker容器和CLI解释器。
似乎可以在我的“ PHP-fpm”容器中识别PHP(它可以获取PHP信息)。当我运行PHPUnit测试时,它似乎已连接到我的容器。
如果我理解正确,PHPStorm会将我的项目文件从WSL Ubuntu装载到一个新容器中,该容器使用Docker容器'PHP-fpm'运行单元测试?但这似乎并未将我的项目文件安装在单元测试容器中。我收到以下错误:
Testing started at 11:54 AM ...
[docker://laradock/PHP-fpm:latest-7.3/]:PHP /opt/.PHPstorm_helpers/PHPunit.PHP --no-configuration --filter Tests\\Feature\\ExampleTest --test-suffix ExampleTest.PHP /opt/project/tests/Feature
The value of autoloader is specified,but file doesn't exist '/opt/project/vendor/autoload.PHP'
Process finished with exit code 1
当我手动(通过Docker桌面)启动Docker容器并创建PHPStorm并进入bash时,/opt/project
中没有文件,但是有/opt/.PHPstorm_helpers/PHPunit.PHP
。问题出在哪。我的Docker从WSL挂载的实际项目文件在/var/www
中。我尝试将路径映射更改为指向这些文件,但仍然遇到相同的错误。
任何建议表示赞赏。
解决方法
根据注释线程,Phpstorm当前不支持Docker WSL PHPUnit测试环境。
,我也为此感到挣扎,但是我确实有一种解决方法。我主要需要用于软件包开发。
我有一个基于官方PHP CLI映像的预构建自定义docker映像,其中包含了我大部分开发所需的各种模块。
仅使用PHP服务创建一个docker-compose.yml
文件,例如,我的是:
version: "3.7"
services:
php:
container_name: pkg
image: my.private.registry/php7-cli:7.4.10
volumes:
- ./:/opt/project
entrypoint: /bin/bash
tty: true
在WSL中使用docker-compose up -d
然后,在选择远程CLI解释器时,选择Docker Compose
并选择您的服务:
选择连接到现有容器:
在测试框架中,选择我们刚刚配置的远程解释器,然后将显示PHPUnit:
运行测试并微笑=)
一种骇人听闻的方法,尤其是当您不需要像站点那样运行服务时创建类似程序包的方法时,但至少现在它是可用的,并且您可以获得WSL2的性能优势,而不是hyper-v后端。