2014-03-05 2 views
6

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

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

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

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

class FeatureContext extends BehatContext { 
    use MyLovelyTrait; 
} 

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

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

+1

Что о 'функции/начальной загрузки/Autoload.php' как' F> Ā' и, если это необходимо, что автозагрузчик то можете загрузить 'MyLovelyTrait.php'? Возможно, не очень креативный. В противном случае создайте билет и предоставите обновленный тест для https://github.com/Behat/Behat/blob/3.0/features/traits.feature, поскольку в соответствии с этой функцией он должен поддерживаться уже «из коробки» :) – hakre

ответ

1

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

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

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

+0

Привет, в чем преимущество использования подконтекстов по сравнению с чертами? Я вижу, что черты и автозагрузка композиторов являются стандартными, субкотекст - своего рода «проприетарная черта», характерная для Бехата. –

+0

Я нашел этот комментарий к документации по документу: «PHP еще не поддерживает горизонтальное повторное использование в своем базовом наборе функций. Хотя эта функциональность, называемая чертами, находится в дорожной карте для PHP 5.4, Behat предоставляет подконтексты в качестве решения стоп-зазора для достижения горизонтальное повторное использование, пока эта функциональность не будет доступна в стабильной версии PHP ». Что заставляет меня думать, так как доступны черты, мы не должны использовать субконтекст, или мы должны? – lloiacono

1

Хорошая причина не useContext («подконтекст») можно найти в Changelog предстоящей 3-й версии Behat:

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

Это ценная информация, но прямо не отвечающая на мой вопрос. Каков предпочтительный способ создания и загрузки пулов контекстов в Behat 3.0? Являются ли черты опцией? –

0

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

// 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; 
} 
Смежные вопросы