我需要为base_url
设置Behat\MinkExtension
。
以下是 app / config / parameters.yml 的一部分:
parameters:
# ...
behat_base_url: http://my-app.local/app_test.php
# ...
以下是 behat.yml 的一部分:
frontend:
gherkin:
filters:
tags: "@frontend"
suites:
javascript:
mink_session: default
mink_javascript_session: selenium2
contexts:
- FeatureContext: ~
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: http://my-app.local/app_test.php
sessions:
default:
symfony2: ~
selenium2:
selenium2:
browser: chrome
capabilities:
extra_capabilities:
chromeOptions:
args: ["--start-maximized"]
我可以做这样的事情(提供对parameters.behat_base_url
的参考)
imports:
- app/config/parameters.yml
# ...
extensions:
Behat\Symfony2Extension: ~
Behat\MinkExtension:
base_url: *parameters.behat_base_url # reference to value from parameters.yml
# ...
或者可能存在另一种正确且“真实”的方式,我可以如何从base_url
或其他地方设置parameters.yml
。因此,任何开发人员都将拥有自己的测试环境配置。
您能告诉我您如何使用不同的测试环境开发人员的配置解决问题吗?
感谢。
答案 0 :(得分:1)
因此。我找到了两个解决方案。
第一个:使用BEHAT_PARAMS
进行配置。例如:
在命令行中运行。
export BEHAT_PARAMS='{"extensions":{"Behat\\MinkExtension":{"base_url":"http://my-app.local/app_test.php"}}}'
注意:在这种情况下,它指定默认参数,因此您不应在behat.yml
中定义这些参数(因为它们具有更高的优先级并将被覆盖)。您可以在behat docs
但这个案子不适合我。每次配置环境时我都不想要开发人员。
第二个:
我在FeatureContext
中指定了以下方法:
/** @BeforeScenario */
public function beforeScenario(\Behat\Behat\Hook\Scope\BeforeScenarioScope $scenario)
{
if ($scenario->getSuite()->getName() == 'javascript') {
$this->setMinkParameter('base_url', $this->getContainer()->getParameter('behat_base_url'));
}
}
因此,在每个场景之前,我会检查套件是javascript
并设置base_url
。我使用容器从parameters.yml
获得的值。
也许它有点"脏"技巧,但它对我来说很好。
从内核中获取容器。要注入内核,您应该实现Behat\Symfony2Extension\Context\KernelAwareContext
并添加方法setKernel()
:
public function setKernel(KernelInterface $kernel)
{
$this->kernel = $kernel;
}
所以,我选择第二种方式。
如果有人知道更优雅的解决方案,请告诉我。