Как требовать поставщика / автопогрузку.php с behat.в формате YML


В моем проекте у меня есть файл autoload.php, который отвечает за требование context классов. Это файл, автоматически сгенерированный Composer. Как я могу включить этот файл, используя behat.yml?

В Phpunit'S phpunit.xml.dist я могу сделать это просто с атрибутом bootstrap следующим образом:

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

Есть ли подобная установка в Behat?

Примечание : я не спрашиваю о запуске Behat из Каталога vendor, потому что когда я это делаю, это работает как ожидалось. Это потому, что файл vendor/bin/behat содержит

include __DIR__.'/../vendor/autoload.php';

Выражение. Но у меня также есть behat, установленный глобально, и когда я запускаю команду global behat, она не загружает мои классы контекста автоматически. И это тот случай использования, который меня интересует.

2 3

2 ответа:

По умолчанию используется автозагрузчик Composer.

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

Нет способа изменить это поведение только с помощью конфигурации. Обратите внимание, что это ожидаемое поведение. Видеть https://github.com/Behat/Behat/issues/490#issuecomment-40928786

Кроме того, рекомендуется установить Behat в вашем проекте.

Возможно, вы могли бы написать расширение Behat, чтобы включить автозагрузчик проекта, даже если используется глобальная версия behat, но я не думаю, что это того стоит. Это также может привести к странным проблемам с автоматической загрузкой дубликатов или неправильных версий классов и т. д.

Наконец, вы также можете настроить автозагрузчик вручную: http://docs.behat.org/en/latest/guides/6.profiles.html#custom-autoloading

Можно использовать следующую новую функцию BehatExtension:

Https://github.com/Postcon/BehatBootstrapExtension