2016-11-25 4 views
2

Behat\MinkExtensionbase_url을 설정해야합니다.Symphony param을 parameters.yml에서 Behat 3 설정으로 삽입하는 방법은 무엇입니까?

frontend: 
    gherkin: 
     filters: 
      tags: "@frontend" 
    suites: 
     javascript: 
      mink_session: default 
      mink_javascript_session: selenium2 
      contexts: 
       - FeatureContext: ~ 

    extensions: 
     Behat\Symfony2Extension: ~ 
     Behat\MinkExtension: 
      base_url: http://my-app.local/app_test.php 
      sessions: 
       default: 
        symfony2: ~ 
       selenium2: 
        selenium2: 
         browser: chrome 
         capabilities: 
          extra_capabilities: 
           chromeOptions: 
            args: ["--start-maximized"] 

내가 뭔가를 할 수 있습니다 : 여기

parameters: 
    # ... 
    behat_base_url: http://my-app.local/app_test.php 
    # ... 

behat.yml의 일부입니다 : 여기

응용 프로그램의 일부/설정/parameters.yml입니다 ( parameters.behat_base_url에 대한 참조를 제공하기 위해)

imports: 
    - app/config/parameters.yml 

# ... 
extensions: 
    Behat\Symfony2Extension: ~ 
    Behat\MinkExtension: 
     base_url: *parameters.behat_base_url # reference to value from parameters.yml 
# ... 

또는 base_urlparameters.yml 또는 다른 장소에서 설정할 수있는 또 다른 권리와 "사실"방식이있을 수 있습니다. 따라서 모든 개발자는 테스트 환경을위한 자체 구성을 갖게됩니다.

다른 테스트 환경 개발자 구성으로 문제를 해결하는 방법을 알려주십시오.

감사합니다.

+0

http://tackoverflow.com/a/26427270/1220930 – Timurib

+0

@Timurib 덕분에,이 게시물을 이미 보았습니다. 누군가가 다른 테스트 환경 구성으로이 문제를 해결하는 방법을 말할 수 있기를 바랍니다. 물론, 나는 devs에게 말할 수있다 : "이봐, 얘들 아 도메인 http : // my-app을 사용하자.내 Behat 테스트를위한 "하지만 ... 못생긴다. 또한 Behat3은 가져 오기를 지원합니다. – Stafox

답변

0

So. 나는 두 가지 해결책을 발견했다.

첫 번째 : 구성하려면 BEHAT_PARAMS을 사용하십시오. 예 :

명령 줄에서 실행합니다.

export BEHAT_PARAMS='{"extensions":{"Behat\\MinkExtension":{"base_url":"http://my-app.local/app_test.php"}}}' 

주 :이 경우는 기본 PARAMS를 지정, 그래서 (그들은 더 높은 우선 순위를 가지고 덮어 쓰기됩니다 becase) 당신이 behat.yml에서 이러한 매개 변수를 정의해서는 안됩니다. 그것에 대해 읽을 수 있습니다 behat docs

그러나이 경우는 나를위한 것이 아닙니다. 환경을 구성 할 때마다 개발자가 필요하지 않습니다.

두 번째

는 :

/** @BeforeScenario */ 
public function beforeScenario(\Behat\Behat\Hook\Scope\BeforeScenarioScope $scenario) 
{ 
    if ($scenario->getSuite()->getName() == 'javascript') { 
     $this->setMinkParameter('base_url', $this->getContainer()->getParameter('behat_base_url')); 
    } 
} 

그래서, 각 시나리오 전에이 스위트 javascript 것을 확인하고 base_url을 설정

FeatureContext에서 다음 방법을 지정했습니다. 내가 콘테이너를 사용하여 parameters.yml에서 얻는 가치. 어쩌면 조금 더러운 속임수 일 수도 있지만 잘 작동합니다.

커널에서 컨테이너를 가져올 수 있습니다. 커널을 주입하려면 Behat\Symfony2Extension\Context\KernelAwareContext을 구현 및 방법 setKernel()을 추가해야합니다 :

public function setKernel(KernelInterface $kernel) 
{ 
    $this->kernel = $kernel; 
} 

그래서, 나는 두 번째 방법을 선택합니다.

누군가가 더 우아한 해결책을 알고 있다면 알려주세요.