Разделение тестовых наборов в Бехате

Я пытаюсь воспроизвести отдельные тестовые наборы с Behat, как с Cucumber. Я пытался настроить файл behat.yml, используя наборы и пути, а также перемещая файлы и папки. Из-за того, что результаты не имеют такого смысла, я начинаю делать вывод, что он вообще не был разработан с учетом этого. И документация не описывает ожидаемые файлы & макеты папок

Для каждого теста я хочу:

  • определенный файл xxx.feature
  • конкретный файл xxxContext.php, определяющий его собственный xxxContext учебный класс

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

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

Примечание: я использую behat 3.0-dev


Редактировать: вот «лучшее», что я мог достичь. У меня есть два пакета, один называется «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.

Моя главная проблема заключается в том, что когда я бегу покататься, он жалуется, что пропущены шаги. По существу, в классе OAuth2Context отсутствуют шаги, которые были определены в Achievements, а в AchievementsContext пропущены шаги, которые были определены в 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 был именем по умолчанию от имени Беата.


Изменить: РЕШЕНИЕ, спасибо Якуб Залас :

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

├── 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

Решение

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

использование фильтры или же пути чтобы определить, какие файлы объектов должны соответствовать данному набору:

# behat.yml

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

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

1

Другие решения

Других решений пока нет …