Behat上下文的特征

时间:2014-03-05 13:42:16

标签: php bdd autoload behat

基本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上下文文件的类加载的最佳实践答案将不胜感激。

3 个答案:

答案 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;
}