Php Behat 3-将参数(从导入的文件)传递给FeatureContext构造函数
我对Behat和YAML是相当陌生的,并且我在向FeatureContext构造函数传递大型参数数组时遇到了问题 对于Behat 2,以下各项工作正常: behat.yml(为方便起见缩短): 和mydata.yml: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:
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工作的那份工作一年半了。所以我甚至无法访问我的旧代码。你有没有找到任何解决方案来解决你试图做的事情?我面临着同样的问题,现在找不到合适的。谢谢