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