编程语言
首页 > 编程语言> > php – Behat 3 – 将参数(从导入的文件)传递给FeatureContext构造函数

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

作者:互联网

我是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'
                ...

这不起作用,没有任何东西传递给构造函数.

Recoverable fatal error: Argument 1 passed to
FeatureContext::__construct() must be of the type array, none given in
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”.下面是FeatureContext类的构造函数所期望的参数的名称.然后它会自动将其转换为关联数组.

标签:php,yaml,behat
来源: https://codeday.me/bug/20190624/1276059.html