我認爲Rspec視圖測試混亂了,因爲測試所尋找的鏈接不是實際視圖的一部分,而是應用程序佈局標題的一部分。Rails視圖Rspec測試期望不符合
例如,我有以下Rspec的代碼:
describe 'signups/new.html.erb' do
before :each do
render template: "signups/new", layout: "layouts/application"
end
it 'displays link to request pages not signup page' do
rendered.should have_link("Make a new request", href: new_request_path)
rendered.should_not have_link("Add me to the mailing list", href: new_signup_path)
end
是我得到的是,鏈接「添加到我的郵件列表」已發現的錯誤。但我向你保證,在本地服務器中情況並非如此。
發生了什麼事的看法是低於(這同樣是所有的佈局/應用程序文件,而不是從申請人數/新):
<nav class="navbar navbar-inverse navbar-static-top" role="navigation">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand" href="<%= root_path %>">Home</a>
<a class="navbar-brand" href="<%= new_request_path %>">Make a new request</a>
<% if current_page?(new_signup_path) == false %>
<a class="navbar-brand" href="<%= new_signup_path %>">Add me to the mailing list</a>
<% end %>
</div>
</div>
</nav>
基本上它是一個的if/then指出,當你在在註冊頁面上,不顯示將用戶發送到註冊頁面的鏈接。然而,Rspec表明這個鏈接是存在的。任何想法爲什麼?
我在想某種方式測試不插入if/then語句,但不知道如何解決這個問題。
嗯,這是什麼?現在我嘗試了它,並且爲錯誤數量的參數拋出了另一個錯誤'1)signups/new.html.erb顯示請求頁面的鏈接而不是註冊頁面 ←[31mFailure/Error:←[0m←[31mputs page.body rendered .hould have_link(「使 產生新的請求」,href:new_request_path)←[0m ←[31mArgumentError←[0m: ←[31mwrong參數數目(1代表0)←[0m ←[36m#./spec /views/signups/new.html.erb_spec.rb:15:in'塊(2級)在'←[0m' –
james
它應該是在自己的路線。它將放置它所在頁面的html。 – Sean
當然傻了我。不幸的是,我仍然得到相同的錯誤:'1)signups/new.html.erb顯示鏈接到請求頁面不註冊頁面 ←[31m失敗/錯誤:←[0m←[31mrendered。should_not have_link(「Add me to the m ailing list」,href:new_signup_path)←[0m ←[31mCapybara :: ExpectationNotMet←[0m: ←[31mexpected not find link「Add me to the mailing list」,found 1 matc h:「將我添加到郵件列表」←[0m ←[36m#./spec/views/signups/new.html.erb_spec.rb:17:in'block(2 levels)in'←[0m –
james