Behat имеет несколько опций для вас, чтобы разделить ваш FeatureContext на несколько классов.Во-первых, вы можете использовать наследство старой школы php5.Если наследование не то, что вам нужно, Behat также поддерживает подконтексты: " Использование подконтекстов ".
Далее, если вы хотите назвать свой класс не так, как FeatureContext
, вы можете переопределить этов разделе Context Configuration вашего файла конфигурации behat.yml
.
Таким образом, вы можете разделить общие определения и ловушки на отдельные классы и использовать их в других наборах функций, а такжеподконтекстирование или наследование.
Но ваш вопрос также спрашивает:
Я хотел бы иметь один файл определения для каждого файла объектов.
Этот запроссовершенно неправильно.Behat and Scenario BDD - это описание поведения вашего приложения в бизнес-терминах и создание тестового словаря для описанного поведения.Помня об этом, вы не можете иметь несколько разных словарей для одного набора функций.Записывая определения шагов, вы говорите Behat, что означает Given I am on "/news"
.И если вы хотите, чтобы этот шаг означал разные вещи от функции к функции - вы делаете это неправильно.
Behat состоит из 2 основных и достаточно отдельных концепций:
*.feature
файлы, написанные на корнишоне.Эти файлы должны быть информативными.Означает, что они должны предоставить всю информацию для читателя, чтобы понять их.Gherkin - это не новый язык программирования для ваших функциональных тестов, это просто markdown для ваших пользовательских историй! FeatureContext.php
классы, описывающие, как Behat должен тестировать ваши функции.Он определяет словарь для всего приложения, который будет использоваться со всем набором функций приложения.Это программный мост между вашими markdown -подобными пользовательскими историями и реальными функциональными тестами.
И вам не следует все портить.В одном наборе функций должен быть словарь с одним шагом (определения)Но вы можете использовать один словарь в более чем одном наборе функций благодаря наследованию и подконтекстам.И да, вы можете разбить один словарь на несколько классов php; -)