2015-12-09 7 views
1

У меня сегодня глубокое обсуждение с коллегой. Является ли вызов от другого, который считается лучшим? Так, например:Огурец, вызывая шаги с другого шага. Лучшая практика?

Given /a turtle/ do 
    puts "turtle!" 
end 

Given /two turtles/ do 
    step "a turtle" 
    step "a turtle" 
end 

На мой взгляд, это означает, что вы не можете изменить файлы функций без проверки всего проекта. Поэтому, если я хочу оставаться сухим, я предпочитаю использовать функцию «code» (т. Е. В Ruby), вызванную с этих шагов.

def turtle do 
    puts "turtle!" 
end 

Given /a turtle/ do 
    turtle 
end 

Given /two turtles/ do 
    turtle 
    turtle 
end 

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

Given /a turtle/ do 
    puts "turtle!" 
end 

Given /two turtles/ do 
    puts "turtle!" 
    puts "turtle!" 
end 

Что считается лучшим опытом и почему?

+0

Вы говорите о [ 'вложенными steps'] (https: // WWW .relishapp.com/огурец/огурец/Docs/задающий-шаги/вложенные шаги)? Я бы предложил разместить образец кода, если это возможно. – orde

+0

Я часто слышу использование вызываемых функций из шагов и использование нескольких вызовов функций в более обобщенных шагах. –

ответ

2

Шаги вложения - очень плохая практика. Если вы сделаете это, вы быстро столкнетесь с запутанным беспорядком. Хорошее определение шага - это однострочный вызов метода. Все остальное может запутаться довольно быстро

Рассмотрим:

When "I login" do 
     visit login_path 
     fill_in ... 
     ... 
     submit 
    end 

    When "I login as as admin" do 
    visit admin_login_path 
    fill_in ... 
    ... 
    end 

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

When "I login" do 
    login user: @i 
    end 

    When "I login as an admin" do 
    login user: @i, role: admin 
    end 

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

0

Лучше использовать как этот

Характеристика

Given "2" turtles 

Шаг Определение

Given/"(\d+)" turtles/ do | count | 
    count.times.do 
    puts "turtle!" 
    end 
end 
+1

Я знаю. Цель этого примера - лучше объяснить вопрос. Возникает вопрос: назвать шаги с других шагов считается лучшей практикой? – Alberto

Смежные вопросы