我有一個看起來像許多集成測試:集成測試:`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 %>
The .times do | n |語法從0開始,所以組織的'fix0'確實正在創建。爲什麼它沒有出現是另一個問題,你的視圖渲染代碼是什麼樣的? –
啊,是的,當然它是從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
好吧,我對這些記錄的排序順序有點好奇,但假設這就是你想要發生的事情,爲了測試這個,你需要確保你正在測試的記錄將會出現在頁面上 - 測試需要已知條件。因此,要麼找出哪些應該顯示在每個頁面上,並且在獲得正確的頁面後進行測試檢查,或者有足夠小的測試集以使其適合於一個頁面。我個人更喜歡保持基本測試集小 - 您可以明確地創建更多記錄爲特定的測試,以驗證分頁行爲像你想要的。 –