Parameters in behat.yml

纵饮孤独 提交于 2019-12-05 06:14:41

问题


I want to make

behat.yml -

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

a parameter pulled from parameters.yml... Is this possible? I made a mink_base_url parameter in parameters.yml and then added

imports:
    - { resource: parameters.yml }

to behat.yml. No matter what I do, I get this

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

回答1:


Behat configuration is in no way related to Symfony's. It's true that Behat uses Symfony's DI container, but it's a separate instance.

If wanted to implement it, you'd probably need to create your own Behat extension to support the imports section.




回答2:


This worked for me with Symfony 3. Just omit base_url from behat.yml, and set it from the container parameters. Thanks to @DanielM for providing the hint.

<?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'));
    }
}



回答3:


If you just want to access base_url, you can get it once mink has been started.

$this->getMinkParameter('base_url');

Here's an example :

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');

    }

}

Note, this needs to be able to access Mink, so it won't work in __construct or in @BeforeSuite. Additionally @BeforeScenario will be called at the start of every scenario which is going to set it pointlessly a lot.




回答4:


It is possible to access the symfony parameters within behat yaml as using

- '%%name_of_the_parameter%%'

Double percentage sign (%%) does the trick.



来源:https://stackoverflow.com/questions/18604061/parameters-in-behat-yml

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!