2015-08-10 2 views
0

Я пытаюсь воспроизвести изолированные тестовые комплекты с Бехатом, как у меня с огурцом. Я пытаюсь настроить файл behat.yml с помощью наборов и путей, а также перемещать файлы и папки. Из-за результатов этого мало смысла, что я начинаю заключать, что он не был разработан с учетом этого. И документация не описывает ОЖИДАЕМЫЕ файлам & макетов папокРазделение наборов тестов в Behat

Для каждого тестового набора Я хочу:

  • конкретного xxx.feature файл
  • конкретного xxxContext.php файл, в котором сформулирован свой xxxContext класса

Мне не нужен монолитный файл FeatureContext.php. Мой проект настолько огромен, что станет кошмаром для поддержания, не говоря уже о потенциальном побочном ущербе между шагами. Это нормально, если один файл behat.yml, если это помогает.

Я также прочитал это post, но я до сих пор не решил проблему. Как я могу создать изолированные тестовые комплекты с Behat?

Примечание: Я использую behat 3,0-Dev


Edit: Вот "лучший" я мог бы достичь. У меня есть два сюиты, один называется «OAuth2», а другой называется «Достижения».

beyat.yml:

default: 
    suites: 
     OAuth2: 
      contexts: 
       - OAuth2Context 
     Achievements: 
      contexts: 
       - AchievementsContext 

иерархии Файл:

├── behat.yml 
└── features 
    ├── Achievements.feature 
    ├── OAuth2.feature 
    └── bootstrap 
     └── OAuth2Context.php <-- Contains the OAuth2Context and AchievementsContext classes. Also, classes are found only if I name this file this way, I don't know why. 

Моя главная проблема заключается в том, что когда я бегу behat, он жалуется, что пропущенные шаги. В принципе, в классе OAuth2Context отсутствуют шаги, которые были определены в «Достижениях», а в «Достижениях» отсутствуют шаги, которые были определены в OAuth2. Этот вывод полностью меня озаряет:

--- OAuth2Context has missing steps. Define them with these snippets: 

    /** 
    * @When I say yes 
    */ 
    public function iSayYes() 
    { 
     throw new PendingException(); 
    } 

    /** 
    * @Then you say no 
    */ 
    public function youSayNo() 
    { 
     throw new PendingException(); 
    } 

--- AchievementsContext has missing steps. Define them with these snippets: 

    /** 
    * @When I ask for an Access Token with my credentials 
    */ 
    public function iAskForAnAccessTokenWithMyCredentials2() 
    { 
     throw new PendingException(); 
    } 

    /** 
    * @Then I receive an Access Token 
    */ 
    public function iReceiveAnAccessToken2() 
    { 
     throw new PendingException(); 
    } 

    /** 
    * @When I ask for an Access Token with a Partner User grant type where: 
    */ 
    public function iAskForAnAccessTokenWithAPartnerUserGrantTypeWhere(TableNode $table) 
    { 
     throw new PendingException(); 
    } 

Я считаю, что это связано с тем, что я определил два отдельных класса в файле php. Но я действительно не хочу делать один монолитный класс. На самом деле, мне даже нравятся два отдельных файла PHP. Классы определяются следующим образом:

class OAuth2Context implements Context, SnippetAcceptingContext 
{ 
... 
    /** 
    * @When I ask for an Access Token with my credentials 
    */ 
    public function iAskForAnAccessTokenWithMyCredentials() 
    { 
    ... 
    } 
... 
} 

class AchievementsContext implements Context, SnippetAcceptingContext 
{ 
... 
    /** 
    * @When I say yes 
    */ 
    public function iSayYes() 
    { 
    ... 
    } 
... 
} 

Другое (меньше) проблема в том, что я должен назвать мой PHP файл OAuth2Context.php вместо FeatureContext.php, иначе классы не найдены вообще. Я не понимаю этого, так как я понимаю, что FeatureContext.php было именем по умолчанию для behad.


Edit: РЕШЕНИЕ благодаря Якуб Zaļās:

Вот файл макета, который работает:

├── behat.yml 
└── features 
    ├── achievements 
    │   └── Achievements.feature 
    ├── bootstrap 
    │   ├── AchievementsContext.php <-- AchievementsContext class 
    │   └── OAuth2Context.php  <-- OAuth2Context class 
    └── oauth 
     └── OAuth2.feature 

Со следующим beyat.YML файл:

default: 
    suites: 
     OAuth2: 
      contexts: 
       - OAuth2Context 
      paths: [ %paths.base%/features/oauth ] 
     Achievements: 
      contexts: 
       - AchievementsContext 
      paths: [ %paths.base%/features/achievements ] 

Таким образом, у меня есть шаги в отделенных PHP файлов, который был мое основное требование, и разделенные люксов с разделенными художественными файлами. Я счастливый турист!

+0

То, что вы пытаетесь сделать, очень просто в Бехате. что ты уже испробовал? –

+0

Спасибо за ваш ответ! Я отредактировал свое оригинальное сообщение и добавил как можно больше деталей. –

ответ

0

С помощью того, как вы в настоящее время организовали свои сюиты, каждый файл функций будет запускаться для каждого пакета.

Использование filters или paths определить, какие имеются файлы должны соответствовать заданному набору:

# behat.yml 

default: 
    suites: 
     OAuth2: 
      contexts: 
       - OAuth2Context 
      paths: [ %paths.base%/features/oauth ] 
     Achievements: 
      contexts: 
       - AchievementsContext 
      paths: [ %paths.base%/features/achievements ] 

Имея один файл особенности в ванную, вероятно, не стоит, так как вы в конечном итоге с большим количеством сьютов без реальная выгода. Улучшенные функции группы в немногих больших наборах и регистрация нескольких контекстов для каждого пакета.

+1

Я попробовал ваше предложение, и он отлично поработал после изменения макета файлов. Я отредактировал свое оригинальное сообщение, чтобы описать решение. Благодаря! –

Смежные вопросы