behat.yml中的参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了behat.yml中的参数相关的知识,希望对你有一定的参考价值。

我要实现

behat.yml -

default:
    extensions:
        BehatMinkExtensionExtension:
            base_url: 'my-url'

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

imports:
    - { resource: parameters.yml }

behat.yml。无论我做什么,我都会得到这个

[SymfonyComponentDependencyInjectionExceptionParameterNotFoundException]                                
The service "behat.mink.context.initializer" has a dependency on a non-existent parameter "mink_base_url"
答案

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

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

另一答案

这对我来说对Symfony 3有用。只需从base_url中省略behat.yml,并从容器参数中设置它。感谢@DanielM提供的提示。

<?php

use BehatMinkExtensionContextMinkContext;
use SymfonyComponentDependencyInjectionContainerInterface;

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'));
    }
}
另一答案

如果您只想访问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将在每个场景的开头被调用,这将无意义地设置它很多。

另一答案

可以使用behat yaml访问symfony参数

- '%%name_of_the_parameter%%'

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

以上是关于behat.yml中的参数的主要内容,如果未能解决你的问题,请参考以下文章

在 Behat 中分离测试套件

URL 片段中的多个参数

ASP.net MVC 代码片段问题中的 Jqgrid 实现

如何清除片段中的参数?

从活动中设置片段的参数

从活动中设置片段的参数