Behat 3 - 将参数(从导入的文件)传递给 FeatureContext 构造函数


Behat 3 - passing parameters (from imported file) to FeatureContext constructor

我对Behat和YAML相当陌生,并且在将大型参数数组传递给FeatureContext构造函数时遇到问题。

使用 Behat 2,以下方法工作正常:

behat.yml(为方便起见而缩短):

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

和 mydata.yml:

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

我可以有很多这样的导入参数文件。

使用 Behat 3 - 我试图通过以下方法实现同样的事情behat.yml(缩短):

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

和 mydata.yml:

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

这不起作用,并且不会将任何内容传递给构造函数。

可恢复的致命错误:参数 1 传递给 FeatureContext::__construct() 必须是数组类型,没有给出 FeatureContext->__construct()

我的 FeatureContext 类如下所示:

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 中内联传递参数(而不是在导入的文件中),一切正常:

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 在外部文件中指定大型参数数组?

你真是个亲密的人。我能够这样做:

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 类的构造函数将期望的参数的名称。然后它会自动将其转换为关联数组。