当 运行 PHPUnit 时,PhpStorm 在 Docker WSL 上找不到 vendor/autoload.php

PhpStorm cannot find vendor/autoload.php on Docker WSL when running PHPUnit

我当前的设置是:PhpStorm、Docker WSL、Ubuntu (WSL)。我所有的项目文件都是本地的,并且在 WSL Ubuntu 中。 Docker 容器和 CLI 解释器在 PhpStorm 上设置。

它似乎在我的 'php-fpm' 容器中识别出 PHP(它提取 PHP 信息)。当我 运行 PHP 单元测试时,它看起来像连接到我的容器。

如果我理解正确,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 中。我已经尝试更改路径映射以指向这些文件,但仍然出现相同的错误。

任何建议表示赞赏。

根据评论线程,Docker WSL PHPUnit 测试环境目前不受 Phpstorm 支持。

我也遇到过这个问题,但我有一个解决方法。我主要需要它来进行包开发。

我有一个 pre-build 自定义 docker 图像,它基于官方 PHP CLI 图像,其中包含我大部分开发所需的各种模块。

创建一个只包含 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

然后当 select 使用远程 CLI 解释器时,select Docker Compose 和 select 您的服务:

选择连接到现有容器:

在测试框架中,select我们刚刚配置的远程解释器和PHP单元将显示:

运行 测试和微笑 =)

一种 hacky 方法,尤其是当您不需要服务 运行 时创建软件包之类的方法时,就像您使用网站一样,但至少现在它是可用的并且您获得了性能优势WSL2 而不是 hyper-v 后端。

我找到了解决方法。

我刚刚将执行 .phar 个文件放入 /usr/local/bin/ 目录。我的意思是。我刚刚更改了我的 Dockerfile 并添加到

RUN curl -L https://squizlabs.github.io/PHP_CodeSniffer/phpcs.phar > /usr/local/bin/phpcs \
    && chmod +x /usr/local/bin/phpcs \
    && curl -L https://phar.phpunit.de/phpunit-9.5.phar > /usr/local/bin/phpunit \
    && chmod +x /usr/local/bin/phpunit \
    && curl -L https://phpmd.org/static/latest/phpmd.phar > /usr/local/bin/phpmd \
    && chmod +x /usr/local/bin/phpmd

它将 .phar 文件下载并移动到 /usr/local/bin/ 目录。这意味着它可以在 docker 容器的任何地方调用。

那你截图复制我的配置就可以了。确保路径匹配。

  1. PHP fpm 设置

  1. PHP单位设置

因此,它也适用于phpcs、phpmd等。现在,您可以直接调用不带斜杠的执行文件