2017-01-03 3 views
0

投稿と好きなものを含むrailsアプリケーションを作成しています。ページ上の1つのオブジェクトを正しくテストする方法

feature "Create like" do 
    include_context "user signed in" 

    def have_updated_likes_count 
    new_likes_count = bonus.likes_count 
    have_content("Likes #{new_likes_count}") 
    end 

    let!(:bonus) { create(:bonus) } 
    let(:decorated_bonus) { bonus.decorate } 

    before { visit root_path } 

    scenario "User likes bonus", js: true do 
    find(".like").click 

    expect(bonus).to have_updated_likes_count 
    expect(page).to have_content(current_user.full_name) 
    end 
end 

ボーナス=ポスト。あなたがボーナスを気に入っているかどうかチェックしています。しかし、このroot_path(メインページ)にはたくさんの投稿(20)があり、それぞれの投稿は好きです。私のテストではexpect(bonuses).to have_updated_likes_countexpect(page).to have_content(current_user.full_name)をチェックしようとしていて、それはフルページをチェックするので、常に両方とも真ですが、私はただ1つのポスト(どこでfind(".like").clickでしたか)をチェックする必要があります。問題を解決するにはどうしたらいいですか?

答えて

0

あなたのページ構造は何かによって異なりますが、一般的にはwithinを使用して特定の要素にアクションを適用する必要があります。

page.within('selector that finds the post element') do 
    find(".like").click 
    expect(bonus).to have_updated_likes_content # issues 
    expect(page).to have_content(current_user.full_name) # issues 
end 

これはあなたの質問に答えますが、残りのテストでも解決する必要があるいくつかの問題があります。

  1. あなたはそうすぐにアクセスしようとするフレーク状になるだろうし、あなたが本当にそれをチェックする前に、ページ上の他のいくつかの視覚的な変更をチェックする必要があり、ボーナスオブジェクトは非同期に更新される.like要素をクリックすると。
  2. データベースからボーナスオブジェクトをリロードしていないので、おそらく同じ値が残っている可能性があります。
関連する問題