Есть ли способ в squish использовать множественное и единственное число на одном шаге BDD?

Я пытаюсь реализовать шаг BDD, который можно использовать, если шаг относится к единственному или множественному числу, например: Тогда я должен увидеть, что отображается имя «Джон», но я также хочу использовать тот же шаг. если у меня есть более одного имени Тогда я должен увидеть, что отображаются имена "Джон, Джордж"

В java вы можете сделать это, когда реализуете такой шаг: @Step("Тогда я должен увидеть имя? (regex) (:?is|are) отображается")

?- для множественного числа and(:? | ) когда вы хотите заменить слово

В файле функций, когда вы вводите (имена или имя; есть или есть), он указывает на один и тот же шаг.

Есть ли способ сделать это в squish?


person Horatiu Moldovan    schedule 09.11.2018    source источник
comment
Вы можете использовать регулярные выражения в именах шагов, как описано в Использование пошаговых шаблонов с регулярными выражениями. Вы уверены, что это актуальная проблема для ваших пользователей? Какую проблему вы видите с «Тогда должно отображаться имя (имена) ...»?   -  person frog.ca    schedule 28.11.2018
comment
Это актуально, потому что таким образом вы можете чаще повторно использовать шаг, а также важно писать правильно с грамматической точки зрения. Если вы можете написать шаг, который можно использовать более чем в одной ситуации, я думаю, вы получите большую гибкость. В книге The Cucumber Book (pragprog.com/book/hwcuc/the-cucumber-book) описано, как лучше написать шаги.   -  person Horatiu Moldovan    schedule 29.11.2018
comment
Да, а как насчет примера, который я привел? Он решает проблему без особых компромиссов, но в то же время сохраняет ее простоту.   -  person frog.ca    schedule 30.11.2018
comment
Пример с регулярным выражением можно использовать как обходной путь. В общем, когда вы используете регулярное выражение, вы хотите передать что-то как переменную и использовать в методе, но я говорю о написании шагов, чтобы быть грамматически правильным и не использовать регулярное выражение, которое обычно используется для передачи переменных, см. это сообщение stackoverflow.com/questions/43528064/   -  person Horatiu Moldovan    schedule 03.12.2018
comment
Мой пример был не о регулярных выражениях. Вот мой пример снова: «Тогда должно отображаться имя (имена) ...»   -  person frog.ca    schedule 03.12.2018
comment
Сила этой функции заключается в том, что вы можете написать только одну реализацию для этих шагов: Затем результаты ... и Затем результат ... и в файле функций вам не нужно писать Тогда результат (ы) (есть), что не является чистым способом написания шагов. Дополнительные примеры можно посмотреть по этой ссылке: agileforall.com/just-enough -регулярные-выражения-для-огурца в строке: я мог бы написать что-то вроде этого: [Когда(@^(я вошел в систему|я вхожу) как? (.*)$)] public void LogInAs (string role) { // авторизуемся под заданной ролью };   -  person Horatiu Moldovan    schedule 04.12.2018
comment
Для примера, приведенного по ссылке выше в файле функций, вы пишете Когда я вхожу в систему как ... или Когда я вхожу в систему как ..., и это чистый способ написания тестов.   -  person Horatiu Moldovan    schedule 04.12.2018


Ответы (1)


См. раздел Использование шаблонов шагов с регулярными выражениями в руководстве froglogic Squish по использованию регулярных выражений в шагах BDD.

Исходя из этого, у меня работает следующее:

# Use (?:...) because it is non-capturing
# Also see https://docs.python.org/2/library/re.html
@Then("I should see the (?:name|names) \"(.*)\" (?:is|are) displayed", regexp=True)
def step(context, nameOrNamesCommaSeparated):
    """Examples:
        Then I should see the name "John" is displayed
        Then I should see the names "John, George" are displayed
    """

    names = []
    if "," in nameOrNamesCommaSeparated:
        names = nameOrNamesCommaSeparated.split(",")
        for i, n in enumerate(names):
            names[i] = n.strip()
    else:
        names = [nameOrNamesCommaSeparated]

    for i, n in enumerate(names):
        test.log("Name #%s: %s" % (i, n))
person frog.ca    schedule 04.12.2018
comment
Действительно, предоставленный ответ работает и для меня. - person Horatiu Moldovan; 05.12.2018
comment
Моя репутация на данный момент ниже 15, и я не могу голосовать - person Horatiu Moldovan; 07.12.2018