-2
フォームの入力フィールドに正しい検証が表示されるようにrspec/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
カピバラはカウントでeqマッチャーを使用するのではなく、待ち時間/再試行を防ぐため、不安定なテストにつながります。 expectとall(..)をそれぞれ ' - (all。 '。form-error'、count:5-index)で置き換えます。 ... end'これは 'all'ステートメントの中の正しい数の要素のチェックを行います(必要ならば待つ)。正しい数の要素があることを確認したければ、expect(all(..))ではなく 'expect(page).to have_css( '。form-error'、count:5-index)'となります。 。)。count).to eq ...あなたが使用しています。 –
https://cucumber.ioをご覧ください –