PHPUnit 通过 Composer 和 PhpStorm

Posted

技术标签:

【中文标题】PHPUnit 通过 Composer 和 PhpStorm【英文标题】:PHPUnit via Composer and PhpStorm 【发布时间】:2012-09-30 14:59:09 【问题描述】:

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

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

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

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

【问题讨论】:

您应该在 php.iniinclude_path 变量中添加 PHPUnit 类的路径。 应该工作(抱歉,因为我没有使用 Composer,所以没有测试过自己)。如果这没有帮助,那么只有youtrack.jetbrains.com/issue/WI-13429 这是一个很快就会包含在 PHPStorm 中的功能。 【参考方案1】:

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

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

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

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

    转到Run -> Edit Configurations... 或直接点击工具栏上的下拉菜单并选择Edit Configurations...。 转到Defaults -> PHPUnitTest Scope 下,选择Defined in configuration file 确保Interpreter options 文本字段为空 转到PHPUnitDefaults 上方)并删除其下的所有条目(这样下次您对特定文件等进行测试时,它将设置一个新文件,但使用新的默认值)。

【讨论】:

这是什么主题,看起来棒极了。 确实,从 126.260 开始,这就是这样做的方法!投票赞成。 我是初学者,第一次进行作曲家设置,现在我怎么知道在哪里获取/制作 phpunit.xml.dist 以包含在 Default Configuration File 设置中。为什么不总是完整的答案?????? 对于全局作曲家设置,您应该使用~/.composer/vendor/autoload.php【参考方案2】:

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

在 PHPStorm 中编辑 phpunit.xml 的配置,并像这样设置解释器选项:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

这个。我花了几个小时试图解决这个问题,我的 PhpStorm 无法自行下载 phar,所以我不得不手动下载它。谢谢。【参考方案5】:

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 之前,我认为你不会从 pear 中获得更好的集成 (http://youtrack.jetbrains.com/issue/WI-13429),但破解你的包含路径可能会奏效。

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

【讨论】:

【参考方案6】:

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

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

Phpstorm 运行|配置对话框

【讨论】:

通过这种方式,我不再需要指定作曲家自动加载脚本。【参考方案7】:

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

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

【讨论】:

以上是关于PHPUnit 通过 Composer 和 PhpStorm的主要内容,如果未能解决你的问题,请参考以下文章

PhpStorm:未找到类'PhpUnit Framework TestCase'(composer / autoload)

如何使用 phpunit 和 composer 轻松生成一个最小的 php 项目? [关闭]

无法使用 composer 安装 phpunit 和 phpunit-selenium

PHPUnit 通过 Composer 和 PhpStorm

Composer 无法更新或安装 PHPUnit/php-code-coverage

composer如何检查php版本?