Какой контекст в черте

Базовый вариант использования Behat рекомендует использовать FeatureContext учебный класс. Кроме того, вы можете указать любые другие классы PHP в features/bootstrap каталог и они загружаются, но в алфавитном порядке, независимо от того, каковы зависимости.

Учитывая, что есть черта и класс FeatureContext:

features/bootstrap/FeatureContext.php
features/bootstrap/MyLovelyTrait.php

Каков наилучший способ загрузить его правильно? Очевидно, что MyLovelyTrait используется в FeatureContext:

class FeatureContext extends BehatContext {
    use MyLovelyTrait;
}

И это не удается, потому что M > F в алфавите.

Я буду рад использовать автозагрузку композитора, но я не хочу require_once autoload.php файл в верхней части BehatContext.php файл. Есть ли способ указать это в behat.yml конфигурация? Также будет признателен любой другой наилучший ответ, касающийся загрузки классов контекстных файлов Behat.

3 ответа

Хорошую причину не использовать Context('Subcontext') можно найти в журнале изменений следующей версии 3 Behat:

3.0.0beta1 / 2013-08-13
...
  * Subcontexts removed in favor of context pools

Я не уверен на 100%, что это ответ на ваш вопрос, но у меня сложилось впечатление, что вы пытаетесь использовать несколько контекстных файлов? Если это так, вам не нужен оператор use вместо этого в методе конструирования FeatureContext.php, мы используем строку:

$this -> useContext('Subcontext', new Subcontext($parameters));

В этом случае другой контекст, который вы хотите использовать, называется "Subcontext".

Я взломал его, работая с зерном беата - все мои черты начинаются с буквы "А". Примеры:

// 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;
}
Другие вопросы по тегам