0
分頁頁面

我有一個看起來像許多集成測試:集成測試:`assert_select「 [ηHREF =」'未能爲

first_page_of_users = User.page(1)     # Using kaminari for pagination. 
first_page_of_users.each do |user| 
    assert_select 'a[href=?]', user_path(user) 
end 

這些測試失敗與錯誤信息,例如:

Expected at least 1 element matching "a[href="https://stackoverflow.com/users/1"]", found 0.. 

我將puts @response.body添加到測試中以查看其響應的代碼。

對於包含在響應正文中的所有用戶,它具有正確的hrefs,例如href="https://stackoverflow.com/users/75938613"。但是,/users/後面的數字要高得多,並且「users1」確實不存在(不只是url不存在,但整個記錄不在該頁面上)。 如果我確保只有幾個固定裝置,以便不適用分頁,測試通過。這使我覺得,如果有分頁的順序first_page_of_users = User.page(1)之處在於first_page_of_users.each do |user|assert_select 'a[href=?]', user_path(user)希望記錄的順序不同應用...

什麼導致這個錯誤?它適用於我的應用程序的不同頁面和模型。


更新:因爲即使當我嘗試

Organization.all.each do |org| 
    puts @response.body 
    assert_select 'a[href=?]', organization_path(org) 
end 

我得到的錯誤另一種模式:

Expected at least 1 element matching "a[href="/organizations/fix0"]", 

與名稱中的組織 「fix0」 是根本不存在的所有在它響應的身體中。我的(縮短的)裝置在下面,他們確認不應該有任何這個名稱的組織。任何想法發生了什麼?

one: 
    name: abcd 
    activated: true 
    activated_at: 2015-04-16 11:38:53 

two: 
    name: efgh 
    activated: true 
    activated_at: 2015-04-16 11:38:53 

<% 35.times do |n| %> 
organization_<%= n %>: 
    name: <%="fix#{n}" %> 
    activated: true 
    activated_at: <%= Time.zone.now %> 
<% end %> 
+0

The .times do | n |語法從0開始,所以組織的'fix0'確實正在創建。爲什麼它沒有出現是另一個問題,你的視圖渲染代碼是什麼樣的? –

+0

啊,是的,當然它是從0開始的,我的錯誤。這是一個非常長的身體反應(網格視圖),但它包括20條記錄:abcd,efgh,fix9,8,7,6,5,4,34,33,32,31,30,3,29,28,27, 26,25,24。所以沒有fix0。我放置了完整的[在線](https://www.dropbox.com/s/8e5xmwtx0j2y5bj/code.txt?dl=0) – Nick

+0

好吧,我對這些記錄的排序順序有點好奇,但假設這就是你想要發生的事情,爲了測試這個,你需要確保你正在測試的記錄將會出現在頁面上 - 測試需要已知條件。因此,要麼找出哪些應該顯示在每個頁面上,並且在獲得正確的頁面後進行測試檢查,或者有足夠小的測試集以使其適合於一個頁面。我個人更喜歡保持基本測試集小 - 您可以明確地創建更多記錄爲特定的測試,以驗證分頁行爲像你想要的。 –

回答

0

當進行集成測試時,重要的是要跟蹤哪些應該顯示哪裏並測試。因爲在這種情況下,第一頁的記錄太多,所以任何在晚期頁面上的內容都會導致失敗的測試。當你懷疑,這樣的事情應該驗證結果的第一頁時:

Organization.order('organizations.name','desc').page(1).each do |organization| 
    assert_select 'a[href=?]', organization_path(organization) 
end 

我建議保持一個較小的數據進行測試設置,因爲在這種情況下,你也應該在您的測試「得到」兩頁並做'頁面(2)'以上的斷言。這意味着這個集成測試必須發出兩個獲取請求(加上您可能需要的任何設置)並檢查結果,並養成這樣的習慣會減慢套件的速度。

+0

謝謝,稍作修改,第一行我認爲需要:Organization.order(:name).page(1).each do | organization |'或'Organization.order(name::desc).page(1).each do | organization | '。或者http://apidock.com/rails/ActiveRecord/QueryMethods/order上的其他選擇。 – Nick