Я пытаюсь воспроизвести изолированные тестовые комплекты с Бехатом, как у меня с огурцом. Я пытаюсь настроить файл 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 файлов, который был мое основное требование, и разделенные люксов с разделенными художественными файлами. Я счастливый турист!
То, что вы пытаетесь сделать, очень просто в Бехате. что ты уже испробовал? –
Спасибо за ваш ответ! Я отредактировал свое оригинальное сообщение и добавил как можно больше деталей. –