2013-02-15 39 views
1

(我將解釋情況,讓別人知道更好的方法來幫助我想做的事)。Behat + symfony2訪問容器參數在自定義擴展中設置

使用的Symfony2 +貝哈特+ Symfony2Extension +水貂+

我們有將場景中被訪問多個網址的應用程序。

我明白,您使用從FeatureContext __construct方法發送的參數,但我想要做的是在behat.yml文件中設置網址,以便我們可以在我們的自定義上下文中使用它們訪問網址。

望着擴展是如何工作的我已經設置了依賴注入如下:

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 I類

現在想要做到以下幾點:

 $url = $kernel->getContainer()->getParameter('url_one'); 

但這不工作,它返回來自我的Symfony2應用程序的參數,這是因爲我已經啓用了symfony2extension。但我無法從擴展類訪問參數或服務。 (請注意,如果我在加載方法中的擴展類中,並且我調用參數,我只是將其設置爲返回,所以我知道它已設置,但它必須設置爲不同的容器?)

首先這可能嗎?如果是的話,我該怎麼做才能使它工作。

非常感謝您的幫助。

回答

4

顯然,$kernel->getContainer()會返回Symfony2應用程序內核的容器。這些內核和容器不與Behat共享。 Behat有它自己的容器實例,它用來管理自己的服務。這意味着擴展是在Behat容器中設置參數,但是您正試圖訪問您的內核容器。這就是爲什麼你有不同的結果。

現在,問題是,如何將您的擴展的某些值傳遞給上下文類。答案是上下文初始化程序。退房:

+0

感謝我加入您的建議和它工作 – user2076907 2013-02-16 21:00:00