2017-01-03 59 views
0

我正在創建具有帖子和喜歡的rails應用程序。如何在頁面上正確測試一個對象

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 

Bonus = post。正如你在這裏看到的,我檢查用戶是否喜歡獎金。但在這個root_path(主頁)中,我有很多帖子(20),並且每個帖子都有喜歡的。我的測試試圖檢查expect(bonuses).to have_updated_likes_countexpect(page).to have_content(current_user.full_name)並且它總是如此,因爲它檢查整頁,但我只需要檢查一個帖子(我在哪裏做了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. 一旦你點擊了。像元獎金對象被異步更新,所以想馬上訪問將是片狀,你真的應該檢查頁面上的其他一些視覺上的變化檢查之前。
  2. 您沒有從數據庫中重新加載獎勵對象,所以它可能仍然具有相同的值
相關問題