Я пишу тест 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
Пустые строки между группами связанных вызовов методов - это один шаг к лучшей читаемости. Плотные куски кода, подобные этому, трудно читать. – tadman
Одна вещь заключается в использовании опций счетчика Capybara, а не для использования счетчика eq в счетчике (что приведет к откидным тестам, поскольку оно предотвращает ожидание/повторную попытку). Замените ожидание и все (..), каждый с - 'all ('. Form-error', count: 5-index) .each do | error | ... end', который будет проверять правильное количество элементов в операторе 'all' (при необходимости ждать). Если вы просто хотели проверить правильность количества элементов, то это будет 'ожидать (страница) .to has_css ('. Form-error', count: 5-index)', а не ожидать (все (.. .). count) .to eq ... вы используете. –
взгляните на https://cucumber.io –