如何配置PhpStorm以使用symfony/phpunit-bridge?

43

在使用Symfony 3.3时,我在配置PhpStorm IDE以使用http://symfony.com/doc/current/components/phpunit_bridge.html方面遇到了问题。

于是我决定只需将phpunit.phar下载到bin并使用它即可。

Symfony 3.4(和Symfony 4)默认没有phpunit.xml.dist文件,因此使用phpunit.phar存在一些问题。

我使用flex安装了PHPUnit:

composer req phpunit

这会创建phpunit.xml.dist文件,然后我可以通过以下命令行运行测试:

php bin/phpunit

但我仍然无法让PhpStorm使用它。

所以我下载了phpunit.phar,并且它可以与提供的phpunit.xml.dist一起使用。

问题1:PhpStorm IDE是否有使用phpunit-bridge的方法?

问题2:对于Symfony 4来说,最佳实践是使用phpunit-bridge还是纯净的phpunit.phar?


但是它在命令行中能工作吗? - Tokeeen.com
"php bin/phpunit" 执行测试。 - my-nick
同样也在尝试通过PhpStorm启动,但设置相当奇怪。使用PhpStorm的价值是什么,而不是终端控制台?(可以在PhpStorm内部) - Tokeeen.com
您可以在GUI中运行单个测试。只需使用快捷键,如CTRL-SHIFT-F10来运行特定的测试/类/目录,使用SHIFT-F10来执行上次执行的测试。此外,输出结果会被很好地解析,因此您实际上可以通过在输出窗口中单击来跳转到文件中的特定行。 - my-nick
PHPStorm中的DX太痛苦了。我们不使用Symfony桥。 - Ryan
  1. 需要测试包
  2. 在命令行上运行php bin/phpunit进行下载
  3. 配置PhpStorm:“path to phpunit.phar”> 'c:\project\path\bin\phpunit',“default configuration file”> 'c:\project\path\phpunit.xml.dist'
  4. 运行测试 - 就这样
- DerDu
5个回答

71

我通常做的是将我的phpunit测试框架指向PHPStorm中由bridge创建的secret .phpunit目录,例如: enter image description here

"phar"文件所在位置为:

bin/.phpunit/phpunit-(major).(minor)/phpunit

或在某些情况下:

vendor/bin/.phpunit/phpunit-(major).(minor)/phpunit

此后,在执行单元测试时,指定的 phpunit 可执行文件将被正确调用,但会带有一个 --no-configuration 选项。这可能会导致自动加载问题(出现许多“类未找到”错误),因为由 Composer 生成的自动加载程序未在任何地方指定。

为了解决这个问题,您应该在项目中拥有一个 phpunit.xml 文件(这是一种常见的做法),在其中指定 Composer 的自动加载器,例如:

<phpunit bootstrap="vendor/autoload.php">

这个phpunit.xml文件应该在"默认配置文件"选项中指定,然后您就可以开始使用了。


关于phpstorm使用phpunit-bridge: 可以通过自定义脚本实现,但您将无法使用PHPStorm界面的良好界面和运行(和调试)特定测试的可能性。


如果我没有这个秘密文件夹,我该怎么办? - syl.fabre
@syl.fabre 那我不确定你是否正在使用phpunit-bridge。 - Renato Mefi
12
实际上我发现这个秘密文件夹是在第一次运行“phpunit-bridge”时创建的。您应该将此添加到您的答案中。 - syl.fabre
1
这是正确的解决方案,使用桥接而不是仅限于库是“从Symfony的角度来看”最佳选择,这非常有效,谢谢! - Tecnocat
3
自从Symfony 5.1以后,你也可以使用以下稳定路径(与版本无关):vendor/bin/.phpunit/phpunit/bin/simple-phpunit - Kévin Dunglas
显示剩余3条评论

29

我成功地使用以下配置运行了symfony/phpunit-bridge:

  • PhpStorm 2018.2.5
  • Symfony 4.1.x
  • 在docker上运行PHP 7.1
  • "symfony/test-pack": "^1.0"

步骤:

在运行composer require --dev symfony/test-pack之后,我在目录/vendor/bin中找到了文件simple-phpunit,它应该可以完美运行symfony/phpunit-bridge

然后在PhpStorm的File | Settings | Languages & Frameworks | PHP | Test Frameworks中设置:

  • 选择单选按钮以选择Path to phpunit.phar选项
  • Path to phpunit.phar设置为simple-phpunit文件的绝对路径(例如/application/vendor/bin/simple-phpunit
  • 勾选Default configuration file:并将输入值设置为您的phpunit.xml.dist的绝对位置(在我的情况下是/application/phpunit.xml.dist

phpstorm phpunit settings

注意:phpunit.xml.dist文件应该配置为使用symfony/phpunit-bridge - 请查看https://symfony.com/doc/current/components/phpunit_bridge.html

点击“应用/确定”按钮,现在您可以从PhpStorm界面运行测试。


当将WSL配置为“远程解释器的PHPUnit”类型时,这也适用。确保配置到simple-phpunit和测试运行程序默认配置文件的整个绝对路径。 - Rvanlaak

3
除了给出的答案之外,值得一提的是,秘密的.phpunit目录不会凭空出现。
在运行composer req phpunit之后,必须首先运行phpunit脚本,例如:
bin/phpunit

这会下载PHPUnit的本地副本,并将其放置在相同的文件夹中,因此phar可执行文件的路径将是:

// path may differ, at the time being is:
bin/.phpunit/phpunit-6.5-0/phpunit

0

对我来说,接受的答案在使用Symfony 5.2和PHPStorm 2020.1时无效。

我发现,如果我将“Path to phpunit.phar”应用为空值,则可以正常工作,尽管首选项对话框会抱怨“!Path to phpunit.phar为空”。

因此,在“首选项 > 语言和框架 > PHP > 测试框架”中进行设置:

enter image description here


-1

这非常简单,Symfony的版本并不重要,因为测试的概念仍然稳定。首先,您需要在PHPstorm首选项中配置测试框架(screenshot),在您的情况下,您可以使用Vendored PHPUnit或手动下载,您可以加入PHPUnit库部分。然后,您需要添加运行/调试配置"phpunit/phpunit""symfony/phpunit-bridge",我看到已经安装了,就是这样。


2
我知道可以使用Vendored PHPUnit代替phpunit.phar,但这并不是一种改进。对于Symfony4,php bin/phpunit甚至不会将phpunit安装在vendor中,而是安装在“bin”子目录中。我希望能得到一些明确的建议,如何配置PhpStorm以实际使用symfony/phpunit-bridge而不是vanilla phppunt。 - my-nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接