artbear / 1bdd

1BDD для OneScript - консольный фреймворк, реализующий BDD для проекта OneScript. Для Windows и Linux.
Mozilla Public License 2.0
29 stars 18 forks source link

Доработать шаги анализа вывода команды #114

Closed artbear closed 7 years ago

artbear commented 7 years ago

Автор @kuntashov в https://github.com/EvilBeaver/oscript-app-template/pull/3#discussion_r104226115

Ребята, почему вы так любите императивные сценарии? Это чисто для компьютера, не для людей, ведь задалбывает читать в каждой строке "И вывод команды бла-бла, и вывод команды бла-бла..." - в таком виде не понятно, зачем геркин, ведь как документацию такие сценарии читать неудобно.

ИМХО, нужно такие сценарии вот так писать:

Сценарий: Получение помощи продукта
    Когда я выполняю команду "oscript" c параметрами "src/console-entry-point.os help"
    Тогда я вижу в консоли вывод
    """
    oscript-app-template v1.0
    Возможные команды:
        help     - Вывод справки по параметрам
        version  - Выводить версию приложения
    """
    И Код возврата команды "oscript" равен 0

Так ведь сценарий ведь более читабелен, не содеджит рутинных повторений, внимание акцентируется на существенном.

Если проверяется не весь вывод, а только какие-то ключевые строки на вхождение, то тогда делаем так:

Сценарий: Получение помощи продукта
    Когда я выполняю команду "oscript" c параметрами "src/console-entry-point.os help"
    Тогда я вижу в консоли вывод:
    | oscript-app-template v1.0              |  
    | Возможные команды:                     |  
    | help     - Вывод справки по параметрам |  
    | version  - Выводить версию приложения  |  
    И Код возврата команды "oscript" равен 0

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

Нужно доработать

По последнему шагу - @kuntashov устроит ли вариант `я вижу в консоли вывод команды "oscript" ?

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

artbear commented 7 years ago

@kuntashov задал вопрос в шапке ишуза. Что скажешь?

kuntashov commented 7 years ago

устроит ли вариант `я вижу в консоли вывод команды "oscript" ?

Конкретно в этом случае в этом смысла не вижу: на предыдущем шаге запустили команду, на следующем - проверили вывод.

В других тестах, возможно потребуется. Прелесть геркина ведь в том и состоит, что он служит для создания DSL, применимого в конкретной ситуации.

Посмотри с точки зрения если запускает несколько команд, то я скорее всего вывод буду проверять после каждой отдельно:

Когда я запускаю команду "команда1"
Тогда я вижу в консоли вывод "вывод 1"

Когда я запускаю команду "команда 2"
Тогда я вижу в консоли вывод "вывод 2"

Когда я запускаю в консоли команду "команда 3 && команда 4" 
Тогда я вижу в консоли вывод "вывод 3 и вывод 4"
kuntashov commented 7 years ago

задал вопрос в шапке ишуза.

Не понял, где вопрос? В предыдущем комменте я на нужный вопрос ответил? (он не в шапке был а в конце текста задачи).

artbear commented 7 years ago

Ты нашел верный вопрос и дал на него ответ. Согласен, сделаю набор универсальных шагов

artbear commented 7 years ago

Еще бы метод с регуляркой сделать для поиска текста @kuntashov Можешь предложить удобочитаемый вариант?

kuntashov commented 7 years ago

Еще бы метод с регуляркой сделать для поиска текста

Что имеешь в виду? Сам шаг или его реализацию? Шаг можно сделать таким:

Тогда я вижу в консоли строку подобно "oscript-app-template v\d+.\d+"
artbear commented 7 years ago

Да, подобно подойдет. Спасибо

artbear commented 7 years ago

2

artbear commented 7 years ago

Реализовано:

artbear commented 7 years ago

@kuntashov Еще какие-нибудь пожелания есть?