基本Behat用例建议使用FeatureContext
类。此外,您可以在features/bootstrap
目录中指定任何其他PHP类并加载它们,但不管依赖项是什么,都按字母顺序加载。
鉴于有一个特征和一个FeatureContext类:
features/bootstrap/FeatureContext.php
features/bootstrap/MyLovelyTrait.php
正确加载它的最佳方法是什么?显然,MyLovelyTrait在FeatureContext中使用:
class FeatureContext extends BehatContext {
use MyLovelyTrait;
}
这是因为M > F
在字母表中失败了。
我很乐意使用composer自动加载,但我不想在require_once
文件的顶部autoload.php
BehatContext.php
文件。有没有办法在behat.yml
配置中指定它?此外,任何其他关于Behat上下文文件的类加载的最佳实践答案将不胜感激。
答案 0 :(得分:1)
我不是100%确定这是在回答您的问题,但我的印象是您正在尝试使用多个上下文文件?如果是这样,您在FeatureContext.php构造方法中不需要use语句,我们使用以下行:
$this -> useContext('Subcontext', new Subcontext($parameters));
在这种情况下,您要使用的其他上下文称为“子上下文”。
答案 1 :(得分:1)
可以在即将发布的Behat版本3的Changelog中找到不使用上下文('子上下文')的充分理由:
3.0.0beta1 / 2013-08-13
...
* Subcontexts removed in favor of context pools
答案 2 :(得分:0)
我通过使用behat粒子来攻击它 - 我的所有特征都始于" A"。例子:
// FeatureContext.php is at features/bootstrap/FeatureContext.php
<?php
use Behat\Behat\Context\ClosuredContextInterface,
Behat\Behat\Context\TranslatedContextInterface,
Behat\Behat\Context\BehatContext,
Behat\Behat\Exception\PendingException;
use Behat\Gherkin\Node\PyStringNode,
Behat\Gherkin\Node\TableNode;
class FeatureContext extends BehatContext
{
use AWebDriverContextTrait;
}
和
// AWebDriverContextTrait is at features/bootstrap/AWebDriverContextTrait.php
<?php
trait AWebDriverContextTrait {
/**
* @Given /^I am on "([^"]+)"/
*/
public function iAmOnSite($url)
{
$this->driver = new \Behat\Mink\Driver\Selenium2Driver(
'firefox',
''
);
$this->session = new \Behat\Mink\Session($this->driver);
$this->session->start();
$this->session->visit($url);
}
private $driver;
private $session;
}