25

我现在尝试了几个小时来设置 PhpStorm 进行单元测试。无论我做什么,我都会得到这个

Process finished with exit code 1
Cannot find PHPUnit in include path ...

PHPUnit 可以(通过命令行)从任何地方访问;我已经设置了正确的包含路径并将 PHPUnit 添加到外部库中。没有机会。

有可能还是只能通过 PEAR 进行安装?我在这里解决了所有相关问题,我在 Mac 上,PHPUnit 通过 CLI 顺利运行。

4

7 回答 7

62

@aderuwe 的答案有效,但该配置不是每个项目的范围,它适用于所有项目。由于 PHPStorm 6(实际上甚至是 EAP 版本PS-126.260),您可以执行以下操作:

  1. 转到File-> Settings-> PHP-> PHPUNIT
  2. 从您的项目供应商目录中选择Use custom loader并输入该autoload.php文件。这个自动加载器将自动加载 Composer 管理的所有依赖项(包括 PHPUnit)。
  3. 指定默认配置文件(通常phpunit.xml.dist来自项目app目录)。

<code>PHP</code> -> <code>PHPUNIT</code>

这需要在每个项目中重复,但以下需要完成一次

您需要在 PHPStorm 中正确配置默认值。

  1. 转到Run->Edit Configurations...或单击工具栏上的下拉菜单并选择Edit Configurations....
  2. 转到Defaults->PHPUnit
  3. 在 下Test Scope,选择Defined in configuration file
  4. 确保Interpreter options文本字段为空
  5. 转到PHPUnit(上面Defaults)并删除它下面的任何条目(这样下次您对特定文件等进行测试时,它将设置一个新文件,但使用新的默认值)。

<code>编辑配置...</code>

于 2013-02-21T09:39:42.727 回答
24

Patrick Visma 在http://youtrack.jetbrains.com/issue/WI-13429上发布了解决方案:

在 PHPStorm 中编辑 phpunit.xml 的配置,并设置 Interpreter 选项,如下所示:

-d auto_prepend_file=/path/to/vendor/autoload.php
于 2012-11-08T09:55:12.823 回答
5

我猜 PhpStorm 依赖于在 php.ini 本身的 include_path 中找到 PHPUnit,而不是在您的项目中。

您可以尝试将本地项目的 vendor/bin 目录添加到 php.ini 的 include_path,但最终这似乎 PhpStorm 可能会受益于支持 composer 安装并运行项目本身的 phpunit(如果可用)。他们的跟踪器实际上存在一个问题,因此我建议您登录并投票:http: //youtrack.jetbrains.com/issue/WI-13429

于 2012-10-10T08:55:43.133 回答
2

我想添加当前版本的 PHPStorm (7.1) 仅适用于以前版本的 PHPUnit (3.7)。它无法与 4.0 及更高版本一起使用。如果您从http://phpunit.de下载了 phpunit.phar ,您可以通过 Settings => PHP => PHPUnit => Path to phpunit.phar 将 PHPStorm 指向它

于 2014-03-09T19:45:57.857 回答
1

PHPStorm 有一个自定义的 PHPUnit 运行脚本 ( ide-phpunit.php),它在内部使用它来处理不同版本的 PHPUnit 并进行 IDE 集成,并且仅依赖于包含路径和PEAR文件夹布局。

为此,它执行:

public static function checkIncludePath()
{
    //check include path
    $PHPUnitParentDirectory = self::getPHPUnitParentDirectory();
    if (is_null($PHPUnitParentDirectory)) {
        echo "Cannot find PHPUnit in include path (" . ini_get('include_path') . ")";
        exit(IDE_PHPUnit_Loader::FAILURE_EXIT);
    }
}

/**
 * @return null | string
 */
private static function getPHPUnitParentDirectory()
{
    $pathArray = explode(PATH_SEPARATOR, ini_get('include_path'));
    foreach ($pathArray as $path)
    {
        if (file_exists($path . DIRECTORY_SEPARATOR . 'PHPUnit/')) {
            return $path;
        }
    }
    return null;
}

您可以通过 composer 安装它并将其添加为普通的可执行文件(ant/phing/native 任​​务),但您将失去 PHPStorm 提供的所有闪亮功能,如进度条、跳转到失败的测试和代码覆盖支持。

因此,从代码中您可以看出您需要将名为 named 的文件夹添加PHPUnit到包含路径中的某个位置。添加供应商可能会有所帮助,但请记住,这样做时需要匹配大小写。

在 PHPStorm 支持使用 composer 或 phar 中的 PHPUnit 之前,我认为使用 pear 中的 PHPUnit 不会获得更好的集成 ( http://youtrack.jetbrains.com/issue/WI-13429),但破解包含路径可能会奏效。

PHPStorm 人员对 3.7 的 runner 进行了一些更新,并且通常对 PHPUnit 的变化非常敏感:)

于 2012-10-10T15:41:53.430 回答
1

我发现如果我把所有的都放在“Test”目录下,并且在配置文件“Test/phpunit.xml”中定义了一个测试套件;我可以像这样简单地设置“运行配置”:

  1. 单击运行 |打开运行/调试配置对话框。编辑配置
  2. 单击工具栏上的+并选择PHPUnit(用于本地执行的单元测试)。
  3. 在顶部填写您喜欢的名称。
  4. 测试范围设置为测试所在的目录。
  5. 点击确定
  6. 然后运行新配置。

phpstorm-运行-配置-对话框

Phpstorm 运行|配置对话框

于 2014-01-05T13:07:39.020 回答
0

可能对其他人有帮助.. PHPStorm 通过 Composer 成功找到了我的本地 PHPUnit,但提示“在 'vendor/autoload.php' 处找不到自动加载器脚本”并且无法运行我的测试。

通过使用绝对路径解决了这个问题,例如/Users/Me/my-project/vendor/autoload.php

找不到自动加载器

于 2022-01-05T21:33:22.847 回答