2016-11-24 7 views
-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 
+1

関連するメソッド呼び出しのグループ間の空白行は、読みやすくするための一歩です。そのようなコードの密集した塊は読みにくいです。 – tadman

+1

カピバラはカウントで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 ...あなたが使用しています。 –

+0

https://cucumber.ioをご覧ください –

答えて

1

ログイン情報を前のブロックに分けることができます。余分な改行を追加すると、すぐに変更が加えられます。

これらのすべての時間にわたってフォームをループする必要性を再考してください。機能テストは高価で低速なので、エラー処理がフォームに実装されていることを確認するために概要として使用してください。

エラーメッセージの具体的な実装は、関連するすべての状況において、はるかに高速で安価なので単体テストに移行します。そうすることで、機能テストが脆弱にならず、必要に応じてメッセージを簡単に変更できます。

関連する問題