2016-11-24 3 views
-2

Я пишу тест rspec/capybara, который гарантирует, что поля ввода в форме отображают правильную проверку.Улучшение читаемости тестов Capybara

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

describe "#page" do 
    context "form validation" do 
    1.upto(4) do |index| 
     it "throws correct validation error when #{5-index} field(s) is (are) empty" do 
     login(page_path) 
     fill_in_form(index) 
     find('.button').trigger(:click) 
     expect(all('.form-error').count).to eq 5-index 
     all('.form-error')[-1...index-5].each do |error| 
      expect(error.text).to eq "#{@inputs[5-index][:error_message]} is required" 
     end 
     end 
    end 
    end 
end 


def fill_in_form(number_of_fields) 
    (0).upto(number_of_fields-1) do |i| 
    fill_in(@inputs[i][:name], :with => (@inputs[i][:value])) 
    end 
end 

def login(path) 
    visit(path) 
    # redirected to login 
    acceptance_login(@user) 
    visit(path) 
    # input fields 
    @inputs = [ 
    {name: 'first_name', error_message: "First name is not valid", value: "John"}, 
    {name: 'last_name', error_message: "Last name is not valid", value: "Doe"}, 
    {name: 'company', error_message: "Company name is not valid", value: "My company"}, 
    {name: 'role', error_message: "Role is not valid", value: "Developer"}, 
    {name: 'phone', error_message: "Phone number is not valid", value: "(800) 492-1111"} 
    ] 
end 
+1

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

+1

Одна вещь заключается в использовании опций счетчика Capybara, а не для использования счетчика eq в счетчике (что приведет к откидным тестам, поскольку оно предотвращает ожидание/повторную попытку). Замените ожидание и все (..), каждый с - 'all ('. Form-error', count: 5-index) .each do | error | ... end', который будет проверять правильное количество элементов в операторе 'all' (при необходимости ждать). Если вы просто хотели проверить правильность количества элементов, то это будет 'ожидать (страница) .to has_css ('. Form-error', count: 5-index)', а не ожидать (все (.. .). count) .to eq ... вы используете. –

+0

взгляните на https://cucumber.io –

ответ

1

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

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

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

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