我想制作
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"
答案 0 :(得分:1)
Behat配置与Symfony没有任何关系。 Behat使用Symfony的DI容器,但它是一个单独的实例。
如果想要实现它,您可能需要创建自己的Behat扩展来支持imports
部分。
答案 1 :(得分:1)
这适用于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'));
}
}
答案 2 :(得分: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
将在每个场景开始时被调用,这将无意义地设置它。
答案 3 :(得分:0)
可以使用来访问behat yaml中的symfony参数
- '%%name_of_the_parameter%%'
双百分号(%%)可以解决问题。