Моей цель
Я пытаюсь создать масштабируемую структуру функций и определений шага для большого приложения и мой первый выстрел пытается связать step_definition файлы к функциям, так что я мог бы использовать один и тот же шаблон шага для различных определений шага ,Как указать файл определения шага для каждого файла функции в cucumber-js?
Мой код
Я показываю мой текущий пример:
Моя структура папок:
/features/sample.feature
/features/example.feature
/features/step_definitions/sample_steps.js
/features/step_definitions/example_steps.js
/features/step_definitions/common/common_steps.js
В моей sample.feature
у меня есть:
Scenario: Launching Cucumber
Given I have some step definitions
When I check some step definition with parameter "any"
Then I should see all green "sample"
В моей example.feature
у меня есть:
Scenario: Launching Cucumber
Given I have some step definitions
When I check some step definition with parameter "any"
Then I should see all green "example"
Шаги Given
и When
определены в файле /common/common_steps.js
и отлично работают.
Шаг Then
определяется как sample_steps.js
, так и example_steps.js
, но по-разному.
В моем sample_steps.js у меня есть:
Then('I should see all green {stringInDoubleQuotes}', (arg) => {
if (arg !== 'sample') {
throw 'I should see all green when the argument is "sample"';
}
return;
});
И, наконец, в моем example_steps.js у меня есть:
Then('I should see all green {stringInDoubleQuotes}', (arg) => {
if (arg !== 'example') {
throw 'I should see all green when the argument is "example"';
}
return;
});
Ошибка
Моя главная цель состоит в том, чтобы иметь все зеленые здесь, но, конечно, это не сработает, и я получаю эту обходную ошибку:
Multiple step definitions match:
I should see all green {stringInDoubleQuotes} - features\step_definitions\example_steps.js:6
I should see all green {stringInDoubleQuotes} - features\step_definitions\sample_steps.js:6
Огурцы-JVM
Я знаю, что в огуречном-JVM мы можем указать атрибут glue
, который связывает функцию и step_definitions, и это именно то, что я ищу, но в огурце-Js. Пример в Java:
@RunWith(Cucumber.class)
@Cucumber.Options(glue = { "com.app.stepdefinitions.common", "com.app.stepdefinitions.sample" })
public class SampleFeature{
}
@RunWith(Cucumber.class)
@Cucumber.Options(glue = { "com.app.stepdefinitions.common", "com.app.stepdefinitions.example" })
public class ExampleFeature{
}
Наконец
Как я могу достичь того же, как cucumbr-JVM с помощью огурца-JS?
ну ... Я бы хотел избежать супер универсального метода, который получает аргументы, потому что он делает этот шаг слишком сложным. Ваш первый вариант - это то, что я делаю прямо сейчас. Но это заставляет меня помещать некоторые технические слова в файл свойств, чтобы различать шаги ... :( – robsonrosa
См. Мое редактирование, оно может быть общим, но будет делать то, что вы хотите, пока Огурец не даст склеить фактический шаг к сценарию. –