Как я могу определить данный оператор в Cucumber, используя другие операторы When? - PullRequest
0 голосов
/ 27 августа 2018

В последнее время я часто использую Cucumber с Cypress (собственно, пишу фреймворк: picklejs.com).Я влюблен в определение всего, используя простой английский.

Однако я не могу найти способ определить мои заданные утверждения, используя другие операторы When.Я могу только программно определить это.

Есть мысли о том, как это сделать?

Пример

GivenDef: I do 2 actions 
    When I do action 1
    And I do action 2

Scenario: I do 3 actions 
    Given I do 2 actions
    When I do action 3

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

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

Так как же тогда это достигается?Выразите свои сценарии на более высоком уровне абстракции.Этот сценарий более высокого уровня делегирует одну или несколько вспомогательных библиотек при выполнении шагов.В значительной степени, как предполагает @ joshua-wade.

Это назад?Это зависит от вашей точки зрения.Если Gherkin используется в качестве языка программирования для определения тестов, это может показаться задом наперед.Если Gherkin - это способ записать примеры того, как ваша система должна использоваться на языке бизнеса, это не так задом наперед.По крайней мере, на мой взгляд.

0 голосов
/ 27 августа 2018

Как вопрос о корнишоне, я не верю, что то, что вы спрашиваете, возможно напрямую.Это одно из ограничений Gherkin как способа определения тестов.

Я видел, что он предложил создать вспомогательную библиотеку для функциональности теста и вызывать эти внешние функции в ваших определениях шагов.Таким образом, вы можете сделать что-то вроде этого:

Огурец:

Scenario: I do 3 actions
    Given I do 2 actions
    When I do action 3

Определение шага:

Given("I do 2 actions", () => {
    action1();
    action2();
});

When("I do action 3", () => {
    action3();
});

Библиотека помощников:

let action1 = () => {
    // ...
};
let action2 = () => {
    // ...
};
let action3 = () => {
    // ...
};

Приношу свои извинения, если код не полностью точен.Я использовал только огурец в Ruby.

...