Параметры в behat.yml

я хочу сделать

behat.yml -

default:
    extensions:
        Behat\MinkExtension\Extension:
            base_url: 'my-url'

параметр, извлеченный из parameters.yml... Возможно ли это? Я сделал параметр mink_base_url в parameters.yml, а затем добавил

imports:
    - { resource: parameters.yml }

вести себя.yml. Что бы я ни делал, я получаю это

[Symfony\Component\DependencyInjection\Exception\ParameterNotFoundException]                                
The service "behat.mink.context.initializer" has a dependency on a non-existent parameter "mink_base_url"

person Brandon    schedule 04.09.2013    source источник
comment
Я не могу сказать спасибо в своем посте? Ух ты...   -  person Brandon    schedule 04.09.2013
comment
спасибо, помогите мне, и другие считаются пустяком, так как они ничего не добавляют к вопросу.   -  person Veve    schedule 25.11.2016


Ответы (4)


Конфигурация Behat никак не связана с Symfony. Это правда, что Behat использует DI-контейнер Symfony, но это отдельный экземпляр.

Если вы хотите реализовать это, вам, вероятно, потребуется создать собственное расширение Behat для поддержки раздела imports.

person Jakub Zalas    schedule 04.09.2013
comment
Есть ли способ получить параметр из parameters.yml в конструкторе FeatureContext с помощью behat3? (я использую symfony2extension) - person Karol F; 12.06.2014
comment
Предполагая, что параметр Symfony называется my-url, вы должны использовать '%my-url%' вместо 'my-url'. - person MauganRa; 12.09.2016

Это сработало для меня с Symfony 3. Просто опустите base_url из behat.yml и установите его в параметрах контейнера. Спасибо @DanielM за подсказку.

<?php

use Behat\MinkExtension\Context\MinkContext;
use Symfony\Component\DependencyInjection\ContainerInterface;

class FeatureContext extends MinkContext {
    /**
     * FeatureContext constructor.
     * @param ContainerInterface $container
     */
    public function __construct(ContainerInterface $container)
    {
        $this->container = $container;
    }

    /**
     * @BeforeScenario
     */
    public function setUpTestEnvironment()
    {
        $this->setMinkParameter('base_url', $this->container->getParameter('my_url'));
    }
}
person Bouke Versteegh    schedule 25.11.2016

Можно получить доступ к параметрам symfony в behat yaml, используя

- '%%name_of_the_parameter%%'

Двойной знак процента (%%) делает свое дело.

person mhrilwan    schedule 29.03.2019
comment
Я больше не использую symfony, но спасибо, что добавили это, так как это может быть полезно для других! - person Brandon; 30.03.2019

Если вы просто хотите получить доступ к base_url, вы можете получить его после запуска mink.

$this->getMinkParameter('base_url');

Вот пример:

class AbstractBehatContext extends MinkContext {

    /**
     * The base url as set behat.yml
     * @var bool
     */
    protected $baseUrl;

    /**
     * @BeforeScenario
     */
    public function getBaseUrl() {

        $this->baseUrl = $this->getMinkParameter('base_url');

    }

}

Обратите внимание, что для этого должен быть доступ к Mink, поэтому он не будет работать в __construct или @BeforeSuite. Кроме того, @BeforeScenario будет вызываться в начале каждого сценария, что во многом приведет к его бессмысленной установке.

person DanielM    schedule 17.10.2014