Какой контекст в черте
Базовый вариант использования 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;
}