PHPUnit通过Composer和PhpStorm

时间:2012-10-10 07:35:31

标签: php phpunit phpstorm composer-php

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

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

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

它是否可能或仅通过PEAR安装?我在这里处理了所有相关问题,我在Mac上,PHPUnit通过CLI顺利运行。

6 个答案:

答案 0 :(得分: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)。
  4. <code>PHP</code> -> <code>PHPUNIT</code>

    需要每个项目重复,但以下需要一次

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

    1. 转到Run - &gt; Edit Configurations...或只需点击工具栏上的下拉菜单,然后选择Edit Configurations...
    2. 转到Defaults - &gt; PHPUnit
    3. Test Scope下,选择Defined in configuration file
    4. 确保Interpreter options文字字段为空
    5. 转到PHPUnit(上面Defaults)并删除其下的所有条目(以便下次对某个特定文件进行测试等时,它会设置一个新文件,但使用新默认)。
    6. <code>Edit Configurations...</code>

答案 1 :(得分:24)

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

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

-d auto_prepend_file=/path/to/vendor/autoload.php

答案 2 :(得分:5)

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

您可以尝试将本地项目的vendor / bin目录添加到php.ini的include_path,但最终看起来像PhpStorm可能会受益于支持作曲家安装并运行项目本身的phpunit(如果可用)。实际上他们的跟踪器上有一个问题,所以我建议你登录并提出它:http://youtrack.jetbrains.com/issue/WI-13429

答案 3 :(得分:2)

我想补充一点,当前版本的PHPStorm(7.1)仅适用于以前版本的PHPUnit (3.7)。它无法与4.0及更高版本一起使用。如果您从http://phpunit.de下载了phpunit.phar,则可以通过Settings =&gt;将PHPStorm指向它。 PHP =&gt; PHPUnit =&gt; phpunit.phar的路径

答案 4 :(得分: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提供的所有闪亮功能,如进度条,跳转到失败的测试和代码覆盖率支持

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

在PHPStorm支持使用来自composer或phar的PHPUnit之前,我认为你不会更好地集成(http://youtrack.jetbrains.com/issue/WI-13429)而不是使用它,但黑客攻击你的包含路径可能会有用。

PHPStorm的人对3.7的跑步者做了一些更新,并且通常对PHPUnit的变化做出了很好的响应:)

答案 5 :(得分:1)

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

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

    Phpstorm Run |配置对话框