(我将解释情况,因为有人知道更好的方式来帮助我做我想做的事情。)
使用Symfony2 + Behat + Symfony2Extension + Mink +
我们有一个具有多个网址的应用程序,将在方案期间访问。
我知道您使用了FeatureContext __construct方法中发送的参数,但我要做的是在behat.yml文件中设置url,以便我们可以在我们的自定义Context中使用它们来访问网址。
看看扩展如何工作我已经设置了依赖注入,如下所示:
class Extension implements ExtensionInterface
{
/**
* Loads a specific configuration.
*
* @param array $config Extension configuration hash (from behat.yml)
* @param ContainerBuilder $container ContainerBuilder instance
*/
public function load(array $config, ContainerBuilder $container)
{
$container->setParameter('url_one', $config['url_one']);
$container->setParameter('url_two', $config['url_two']);
}
/**
* Setups configuration for current extension.
*
* @param ArrayNodeDefinition $builder
*/
public function getConfig(ArrayNodeDefinition $builder)
{
$builder->
children()->
scalarNode('one_url')->
isRequired()->
end()->
scalarNode('two_url')->
isRequired()->
end()->
end();
}
code continues....
我的behat.yml看起来像这样:
default:
extensions:
Behat\MinkExtension\Extension:
goutte: ~
selenium2: ~
Behat\Symfony2Extension\Extension: ~
Acme\AcmeExtension\Extension:
url_one: 'http://example1.com'
url_two: 'http:/example2.com'
现在在我的FeatureContext.php类中,我想执行以下操作:
$url = $kernel->getContainer()->getParameter('url_one');
但这不起作用,它从我的Symfony2应用程序返回参数,这是预期的,因为我启用了symfony2extension。但是我无法从扩展类中访问参数或服务。
(请注意,如果我在load方法的Extension类中,我调用参数我只是设置它返回它,所以我知道它已设置,但它必须设置为不同的容器?)< / p>
首先这可能吗?如果是这样,我该怎么做才能使它发挥作用。
非常感谢您的帮助。
答案 0 :(得分:4)
显然,$kernel->getContainer()
会返回Symfony2应用内核的容器。那些内核和容器不与Behat共享。 Behat有自己的容器实例,用于管理自己的服务。这意味着扩展程序在Behat容器中设置参数,但您尝试访问 app 内核容器。这就是为什么你有不同的结果。
现在,问题是,如何将扩展中的某些值传递给上下文类。答案是上下文初始化。退房: