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.ini 的 include_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
-> PHPUnit
在Test Scope
下,选择Defined in configuration file
确保Interpreter options
文本字段为空
转到PHPUnit
(Defaults
上方)并删除其下的所有条目(这样下次您对特定文件等进行测试时,它将设置一个新文件,但使用新的默认值)。
【讨论】:
这是什么主题,看起来棒极了。 确实,从 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