2014-02-18 63 views
0

我認爲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語句,但不知道如何解決這個問題。

回答

0

把一個puts page.body就在行之前rendered.should have_link("Make a new request", href: new_request_path)我不認爲你的規範是在頁面上。

像這樣

it 'displays link to request pages not signup page' do 
    puts page.body 
    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 

編輯:

重讀的問題,我以前的建議是不是所有的有用,雖然puts page.body是一個很好的事情,以幫助測試。我認爲也許是因爲你正在渲染註冊/新建,但這不是路徑,所以它不是「當前頁面」。也許嘗試一個redirect_to來代替。

嘗試visit new_signups_path或其他路徑(請與rake routes在那裏我有puts.page.body你或許可以(我想,但它取決於你的其他測試)擺脫前:每個

+0

嗯,這是什麼?現在我嘗試了它,並且爲錯誤數量的參數拋出了另一個錯誤'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

+0

它應該是在自己的路線。它將放置它所在頁面的html。 – Sean

+0

當然傻了我。不幸的是,我仍然得到相同的錯誤:'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

0

在在開始測試的,你需要使用Capybara導航到註冊頁面。

例如,如果您的註冊路線/註冊,你會打電話

visit '/signup' 

每塊之前。

+0

我所做的是用訪問'/ signups/new'替換渲染模板/佈局,它是耙路徑中的路徑,然後我所有的測試失敗= / – james