Корнишон совпадений - PullRequest
       44

Корнишон совпадений

0 голосов
/ 16 октября 2019

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

Если у меня есть Фон (версия 1), общее предварительное условие, почему все мои Сценарии получают ошибки, говорящие мне: «Совпадение определений с несколькими шагами», разве точка Фон не является общей для всех? ?

Если у меня разные данные заданные (версия 1), то не следует ли следующее, когда это разрешает одно и то же действие, основанное на разных стартовых позициях? Опять же, когда вызывает "Соответствие определений нескольких шагов"

Вот мой файл функций. В идеале я хочу версию 1, это то, как бизнес-эксперт пишет их, отдельные, удобные для чтения, но единственный способ заставить это работать без ошибок "Multiple step Definition Matchs" - это версия 2, где каждый вариант должен быть комбинацией,более сложный, труднее для чтения.

Почему я не могу использовать Фон с более чем 1 сценарием?

Эти принудительные изменения пахнут, так что я делаю неправильно, что я пропустил? Я нашел сотни простых примеров, но мне кажется, что мне не хватает какого-то руководящего принципа корнишона. Чего мне не хватает?

Feature: Help
    When users says help
    "As a user
    I want the bot to understand me when I ask for help, 
    In order that I get some guidance, or some idea what to do next"

  # Version 1
    Background: 
      Given the user is in conversation with the bot
      *// above line causes error*

    Scenario: No topic
        Given there is no topic
         When the user says help
         *// above line causes error*
         Then the bot responds with a sorry, regretful message
          And then asks if the user would like to see a list of available features

    Scenario: A valid topic
        Given there is a valid topic
         When the user says help
         *// above line causes error*
         Then the bot responds with a confirmation message
          And then asks if the user would like to see a list of topic features

  # Version 2
    # Scenario: All
    #     Given the user is in conversation with the bot
    #      When the user says help and there is no topic
    #      Then the bot responds with a sorry, regretful message
    #       And then asks if the user would like to see a list of available features
    #      When the user says help and there is a valid topic
    #      Then the bot responds with a confirmation message
    #       And then asks if the user would like to see a list of topic features


Failures:

1) Scenario: No topic # features/help.feature:10
   ✖ Given the user is in conversation with the bot
       Multiple step definitions match:
         the user is in conversation with the bot - tests/feature_definitions/help_definition.js:4 
         the user is in conversation with the bot - tests/feature_definitions/help_definition.js:21
   - Given there is no topic # tests/feature_definitions/help_definition.js:7
   ✖ When the user says help
       Multiple step definitions match:
         the user says help - tests/feature_definitions/help_definition.js:10
         the user says help - tests/feature_definitions/help_definition.js:27
   - Then the bot responds with a sorry, regretful message # tests/feature_definitions/help_definition.js:13
   - And then asks if the user would like to see a list of available features # tests/feature_definitions/help_definition.js:16

2) Scenario: A valid topic # features/help.feature:16
   ✖ Given the user is in conversation with the bot
       Multiple step definitions match:
         the user is in conversation with the bot - tests/feature_definitions/help_definition.js:4 
         the user is in conversation with the bot - tests/feature_definitions/help_definition.js:21
   - Given there is a valid topic # tests/feature_definitions/help_definition.js:24
   ✖ When the user says help
       Multiple step definitions match:
         the user says help - tests/feature_definitions/help_definition.js:10
         the user says help - tests/feature_definitions/help_definition.js:27
   - Then the bot responds with a confirmation message # tests/feature_definitions/help_definition.js:30
   - And then asks if the user would like to see a list of topic features # tests/feature_definitions/help_definition.js:33

Ответы [ 2 ]

0 голосов
/ 18 октября 2019

Спасибо всем за ваши ответы. Я также был на канале поддержки слабины огурца, и где-то среди всех этих мыслей пенни наконец упала.

Каждый пример, который я прочитал, показывает файл функций, сопоставленный 1-к-1 с шагамифайл определения.

По моему мнению, функции создали шаблоны в окне терминала, которые я затем поместил в файл step.js, который был файлами, которые запускались в тестах, в конце концов, они были .js! Шаблоны терминалов продублированы, и я копировал их в виде сценария функции в steps.js 1-к-1

Мне не пришло в голову, что файлы объектов остались частью процесса и фактически были шагомдрайвер, когда тесты запущены.

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

Еще раз спасибо всем, кто подтолкнул мышлениев правильном направлении: -)

0 голосов
/ 17 октября 2019

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

Определение для When the user says help должно применяться к всем сценариям, на которых этот шаг используется. Это определение должно быть общим.

Если этот же шаг должен отличаться в зависимости от сценария, у вас есть несколько вариантов:

  1. Создать отдельный тестовый проекттак что вы можете иметь 2 глобально уникальных определения, так как у вас будет 2 отдельных глобальных контекста для определений шагов.

  2. Параметризация шага

Параметризацияstep - это, пожалуй, самая легкая вещь, и я буду использовать When the user says help в качестве примера:

Scenario: No topic
    Given there is no topic
     When the user says "help"
     Then the bot responds with a sorry, regretful message
      And then asks if the user would like to see a list of available features

В строке выше слово help помещается в двойные кавычки. Генерация определения шага позволит вам передать текст между кавычками в качестве аргумента для метода определения шага:

When(/the user says "([^"]+)"/, function(textToSay) {
    // "speak" to the chat bot using whatever API you have defined
    chatBot.receiveMessage(textToSay);
});

Теперь этот единственный шаг может принимать несколько фрагментов текста:

When the user says "help"
...

When the user says "list topics"
...

When the user says "I WANT TO SPEAK TO A REAL PERSON!!!!"
Then the bot responds with "I'm sorry, Dave. I'm afraid I can't do that."

(Хорошо, я сделал последний шаг, но было бы забавно, если бы бот не понимал, что говорит пользователь)

...