Как настроить PhpStorm для использования Symfony/phpunit-bridge

У меня возникли проблемы с настройкой IDE PhpStorm для использования http://symfony.com/doc/current/components/phpunit_bridge.html во время работы с Symfony 3.3.

Я решил просто загрузить phpunit.phar в bin и использовать его вместо этого.

Symfony 3.4 (и Symfony 4), даже не имеет phpunit.xml.dist из коробки, поэтому есть проблема с использованием phpunit.phar.

Я установил PHPUnit с помощью flex:

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 или vanilla phpunit.phar)?

Ответы

Ответ 1

То, что я обычно делаю, это указать мою инфраструктуру тестирования phpunit на PHPStorm в секретный каталог .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.

Ответ 2

Мне удается запустить symfony/phpunit-bridge с помощью этой конфигурации:

  • PhpStorm 2018.2.5
  • Symfony 4.1.x
  • PHP 7.1 работает на докере
  • "symfony/test-pack": "^ 1.0"

шаги:

после того, как composer require --dev symfony/test-pack я имею в файле dir /vendor/bin simple-phpunit который должен simple-phpunit запускать symfony/phpunit-bridge.

Затем в PhpStorm в File | Settings | Languages & Frameworks | PHP | Test Frameworks File | Settings | Languages & Frameworks | PHP | Test Frameworks File | Settings | Languages & Frameworks | PHP | Test Frameworks набор 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

Нажмите Appply/Ok, и теперь вы можете запускать тесты из интерфейса PhpStorm

Ответ 3

Помимо данного ответа, стоит упомянуть, что секретный каталог .phpunit не появится из ничего.

После того, как composer req phpunit, phpunit сначала запустить скрипт phpunit, например:

bin/phpunit

который загрузит локальную копию PHPUnit и поместит ее в ту же папку, поэтому путь к исполняемому файлу phar будет:

bin/.phpunit/phpunit-6.5/phpunit

Ответ 4

Это очень просто и не имеет значения для версии Symfony, поскольку концепция тестирования еще стабильна. Сначала вам нужно настроить тестовую среду на предпочтениях PHPstorm (скриншот), в вашем случае вы можете использовать Vendored PHPUnit или загрузить вручную, вы можете присоединиться к разделу PHPUnit library. Затем вам нужно добавить конфигурацию Run/Debug. "phpunit/phpunit" и "symfony/phpunit-bridge" как я вижу, были установлены, это все.