2

我要实现

behat.yml -

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

从parameters.yml中提取的参数......这可能吗?我在 parameters.yml 中做了一个 mink_base_url 参数,然后添加

imports:
    - { resource: parameters.yml }

behat.yml。不管我做什么,我都会得到这个

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

4 回答 4

1

Behat 配置与 Symfony 的配置没有任何关系。Behat 确实使用了 Symfony 的 DI 容器,但它是一个单独的实例。

如果想实现它,您可能需要创建自己的 Behat 扩展来支持该imports部分。

于 2013-09-04T07:35:55.520 回答
1

这对我来说适用于 Symfony 3。只需省略base_urlfrom 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'));
    }
}
于 2016-11-25T11:02:32.887 回答
1

可以使用 behat yaml 访问 symfony 参数

- '%%name_of_the_parameter%%'

双百分号 (%%) 可以解决问题。

于 2019-03-29T13:52:03.863 回答
0

如果你只是想访问 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,将在每个场景开始时调用,这将毫无意义地设置很多。

于 2014-10-17T14:30:02.380 回答