我已經完成了Ruby on Rails教程的第9章,並添加了我自己的功能來在用戶首次註冊時鎖定用戶,以便管理員擁有在新用戶訪問該網站之前進入並批准(「解鎖」)他們的ID。我添加了一個:鎖定的布爾屬性,它的作用就像User對象的:admin屬性一樣。我現在都在工作,但是我很難爲它寫一個簡單的測試。我增加了以下測試user_pages_spec.rb,剛下層次結構「分頁」 - 「作爲管理員用戶」:我爲Rails編寫的新用戶鎖定函數測試教程應用
describe "as an admin user to unlock new users" do
let(:admin) { FactoryGirl.create(:admin) }
let(:locked_user) { FactoryGirl.create(:locked) }
before do
sign_in admin
visit users_path
end
it { should have_link('unlock', href: user_path(locked_user)) }
it { should_not have_link('unlock', href: user_path(admin)) }
end
,並支持「鎖定」用戶的創建,加入這factories.rb :
factory :locked do
locked true
end
我可以手動確認通過火狐的解鎖鏈接顯示出來,但我仍然得到以下故障:
1) User pages index pagination as an admin user to unlock new users
Failure/Error: it { should have_link('unlock', href: user_path(locked_user)) }
expected link "unlock" to return something
# ./spec/requests/user_pages_spec.rb:64:in `block (5 levels) in <top (required)>'
我想知道一)爲什麼失敗: ),b還有b)如何去調試這樣的問題。我如何說出測試實際上是「看到」的?我嘗試了另一個stackoverflow用戶提出的另一個問題,但在這種情況下,我發現它的使用受到限制。
任何意見或建議,將不勝感激。提前致謝!
-Matt
嗨,Eric,再次感謝您的幫助!我在上面嘗試了你的修改過的測試,在user_pages_spec.rb文件的各個部分,沒有運氣。即使在設置了binding.pry斷點然後檢查page.body之後,我可以看到「解鎖」鏈接在頁面上,而locked_user正確。我不知道我是否以測試框架能夠理解的方式創建鏈接。這裏是_user.html.erb的相關部分: '<%if current_user.admin? && user.locked? &&!current_user?(user)%> | <%= link_to「解鎖」,unlock_user_path(用戶),方法:: get,確認:「啓用新用戶?」 %> <% end %>' – newton10471 2012-04-16 18:40:13
嘗試在斷點處使用unlock_user_path(user)以確保它符合您的期望。 – EricM 2012-04-17 22:35:58
結果如下:'[1] pry(#)> unlock_user_path(user) =>「/ users/826/unlock「 [2] pry(#)>'。我還發現並嘗試了Capybara的'save_and_open_page'方法,該方法打開了一個網頁瀏覽器,在相關的地方出現問題的頁面,並顯示了我期望的頁面。我正在考慮從user_pages_spec.rb文件中彈出此測試,並將其放入它自己的測試文件中,以將其與可能會干擾的其他任何內容隔離開來。 –
newton10471
2012-04-18 21:18:05