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

Php Behat 3-将参数(从导入的文件)传递给FeatureContext构造函数,php,yaml,behat,Php,Yaml,Behat,我对Behat和YAML是相当陌生的,并且我在向FeatureContext构造函数传递大型参数数组时遇到了问题 对于Behat 2,以下各项工作正常: behat.yml(为方便起见缩短): 和mydata.yml: default: context: parameters: some_long_array: 'key1': 'value1' 'key2': 'value2' ... default: suites:

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

对于Behat 2,以下各项工作正常:

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

和mydata.yml:

default:
  context:
    parameters:
      some_long_array:
        'key1': 'value1'
        'key2': 'value2'
        ...
default:
  suites:
    default:
      contexts:
        - FeatureContext:
            parameters:
              some_long_array:
                'key1': 'value1'
                'key2': 'value2'
                ...
我可以有很多这样的导入参数文件

使用Behat3-我试图通过以下方法实现同样的效果 behat.yml(缩写):

和mydata.yml:

default:
  context:
    parameters:
      some_long_array:
        'key1': 'value1'
        'key2': 'value2'
        ...
default:
  suites:
    default:
      contexts:
        - FeatureContext:
            parameters:
              some_long_array:
                'key1': 'value1'
                'key2': 'value2'
                ...
这不起作用,没有任何内容传递给构造函数

可恢复的致命错误:参数1传递给 FeatureContext::\构造()必须是数组类型,在 FeatureContext->\uuuu构造()

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

请记住,函数定义必须使用behat.yml文件中给出的相同参数名。除非我遗漏了什么,否则用户导入的
似乎不会遗漏。这在behat 3.1.0中仍然可行吗?我想要一个'base'behat.yml文件,它导入一个config.yml文件,该文件包含api\u url、登录名、密钥等项。这意味着behat.yml文件可以进行版本控制,而config.yml可以是特定于环境的。@richardtaper是否存在导入解决方案?我现在也面临着同样的问题,如果没有解决方案,我会编写自己的扩展以使其成为可能如果有解决方案,我还没有找到@EmilioMg——请,如果找到,请报告:)我记得在Behat 2中,我能够引用其他YML文件。但我还没有尝试过Behat 3,我已经离开了在Behat工作的那份工作一年半了。所以我甚至无法访问我的旧代码。你有没有找到任何解决方案来解决你试图做的事情?我面临着同样的问题,现在找不到合适的。谢谢