2013-02-15 6 views
1

(상황을 설명하겠습니다. 누군가 내가 원하는 것을 공략 할 수있는 더 나은 방법을 알고 있습니다.) 사용Behat + symfony2 액세스 컨테이너 매개 변수는 사용자 정의 확장자로 설정합니다.

Symfony2 + Behat + Symfony2Extension + 밍크 +

우리는 시나리오 중에 방문 할 것입니다 여러 URL과 함께 응용 프로그램이 있습니다.

FeatureContext __construct 메서드에서 보낸 매개 변수를 사용하는 것을 이해하지만, 내가하려고하는 것은 behat.yml 파일의 url을 설정하여 사용자 지정 컨텍스트에서 사용할 수 있습니다. URL을 방문하십시오.

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는 다음과 같습니다 : 다음과 같이 확장 I를 작동하는 방법을 살펴보면

는 설치 의존성 주입이

내 FeatureContext.php 클래스 I에서 지금
default: 
    extensions: 
     Behat\MinkExtension\Extension: 
      goutte: ~ 
      selenium2: ~ 
     Behat\Symfony2Extension\Extension: ~ 
     Acme\AcmeExtension\Extension: 
      url_one: 'http://example1.com' 
      url_two: 'http:/example2.com' 

다음을 원합니다 :

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

그러나 이것은 작동하지 않습니다. 내 Symfony2 응용 프로그램의 매개 변수는 symfony2extension을 활성화 한 이후로 예상됩니다. 하지만 확장 클래스에서 매개 변수 나 서비스에 액세스 할 수 없습니다.

(로드 메서드의 Extension 클래스에 있고 매개 변수를 호출하면 반환되지만 설정되어 있음을 알 수 있지만 다른 컨테이너로 설정해야한다는 점에 유의하십시오.)

우선 가능합니까? 그리고 만약 그렇다면 그것을하기 위해 무엇을해야합니까.

도움을 주셔서 감사합니다.

답변

4

분명히 $kernel->getContainer()은 Symfony2 응용 프로그램 커널의 컨테이너를 반환합니다. 이러한 커널과 컨테이너는 Behat과 공유되지 않습니다. Behat은 자신의 서비스를 관리하기 위해 자체 컨테이너 인스턴스를 가지고 있습니다. 즉 확장 기능은 Behat 컨테이너에 매개 변수를 설정하고 있지만 커널 컨테이너에 액세스하려고 시도하고 있음을 의미합니다. 그래서 당신은 다른 결과를 가지고 있습니다.

이제는 확장에서 컨텍스트 클래스로 어떤 값을 전달할 수 있습니까? 응답은 컨텍스트 초기화 프로그램입니다. 체크 아웃 :

+0

감사합니다 나는 당신의 제안을 추가하며 노력하고 있습니다 – user2076907