2015-01-02 3 views
4

저는 Behat과 YAML을 처음 사용하고 있으며, 많은 수의 매개 변수 배열을 FeatureContext 생성자에 전달하는 데 문제가 있습니다.Behat 3 - 가져온 파일에서 가져온 매개 변수를 FeatureContext 생성자에 전달합니다.

(편의를 위해 단축) behat.yml :

default: 
    context: 
    extensions: 
    Behat\MinkExtension\Extension: 
     base_url: 'http://mysite.local' 
     goutte: ~ 
     selenium2: ~ 
     ... 
imports: 
    - config/data/mydata.yml 

및 mydata.yml : Behat 2와

는 다음 괜찮 았는데

default: 
    context: 
    parameters: 
     some_long_array: 
     'key1': 'value1' 
     'key2': 'value2' 
     ... 

와 나는 많은을 가질 수 그러한 가져온 매개 변수 파일.

default: 
    suites: 
    default: 
     contexts: 
     - FeatureContext 
    extensions: 
    Behat\MinkExtension: 
     base_url: 'http://mysite.local' 
     goutte: ~ 
     selenium2: ~ 
    ... 
imports: 
    - config/data/mydata.yml 

및 mydata.yml : - 3 Behat 사용

나는 다음과 같은 (단축) behat.yml과 같은 일을 달성하기 위해 노력

default: 
    suites: 
    default: 
     contexts: 
     - FeatureContext: 
      parameters: 
       some_long_array: 
       'key1': 'value1' 
       'key2': 'value2' 
       ... 

이 작동하지 않고 아무것도 생성자에 전달되지 않습니다.

class FeatureContext implements SnippetAcceptingContext 
{ 

    /** 
    * Initializes context. 
    * 
    * Every scenario gets its own context instance. 
    * You can also pass arbitrary arguments to the 
    * context constructor through behat.yml. 
    */ 
    public function __construct(array $parameters) 
    { 
    var_dump($parameters); 
    } 

} 

내가 (가져온 파일에 대신) behat.yml에 인라인 매개 변수를 전달하면, 모든 작품을 좋아 :

Recoverable fatal error: Argument 1 passed to FeatureContext::__construct() must be of the type array, none given in FeatureContext->__construct()

내 FeatureContext 클래스는 다음과 같습니다

default: 
    suites: 
    default: 
     contexts: 
     - FeatureContext: 
      parameters: 
       some_long_array: 
       'key1': 'value1' 
       'key2': 'value2' 
    extensions: 
    Behat\MinkExtension: 
     base_url: 'http://mysite.local' 
     goutte: ~ 
     selenium2: ~ 
    ... 

테스트가 실행되고 예상대로 배열을 볼 수 있습니다. 문제는 필자가 여러 개의 큰 매개 변수 배열을 가지고 있고 behat.yml 파일에서 모두이를 지정하는 것이 비현실적이라는 것입니다.

Behat 3을 사용하여 외부 파일에 큰 매개 변수 배열을 지정하려면 어떻게해야합니까?

+0

당신이하려는 일에 대한 해결책을 찾았습니까? 나는 똑같은 문제에 직면하고 있으며 지금은 아무 것도 찾을 수 없다. 감사! – LaurentG

답변

3

당신은 너무 친한 사람이었습니다. 나는 이렇게 할 수 있었다 :

default: 
    autoload: [ %paths.base%/contexts ] 
    extensions: 
     Behat\MinkExtension: 
      base_url: http://qa.api.somesite.com 
      sessions: 
       default: 
        selenium2: ~ 
     Sanpi\Behatch\Extension: ~ 
    suites: 
     default: 
      paths: [ %paths.base%/features ] 
      filters: 
      contexts: 
       - FeatureContext 
       - Behat\MinkExtension\Context\MinkContext 
     frontend: 
      paths: [ %paths.base%/features/frontend ] 
      filters: 
      contexts: 
       - FeatureContext: 
        parameters: 
         environment: qa 
         api_url: http://api.somesite.com 
         login: some_login 
         key: 409jfa94k4tj 
       - Behat\MinkExtension\Context\MinkContext 
       - behatch:browser 

"프론트 엔드"제품군에 주목하면 "FeatureContext"컨텍스트가 있습니다. 아래는 FeatureContext 클래스의 생성자가 기대하는 매개 변수의 이름입니다. 그런 다음 자동으로 연관 배열로 변환합니다.

+0

함수 정의는 behat.yml 파일에 주어진 것과 동일한 매개 변수 이름을 사용해야 함을 명심하십시오. – pthurmond

+0

내가 뭔가를 놓치지 않는다면, 이것은 사용자의'imports '처럼 보이지 않을 것이다. 이것은 여전히 ​​3.1.3 버전에서 가능합니까? 나는 api_url, 로그인, 키 등 항목을 포함하는 config.yml 파일을 가져 오는 '기본'behat.yml 파일을 갖고 싶습니다. 이것은 behat.yml 파일이 버전 제어 및 구성이 될 수 있음을 의미합니다. yml은 특정 환경 일 수 있습니다. – RichardTape

+0

@RichardTape는 수입품을위한 솔루션을 제공합니까? 지금 당장 같은 문제에 직면 해 있습니다. 해결책이 없다면 직접 내 고유 번호를 써서 가능합니다. – EmilioMg