2014-01-23 41 views
1

我正在寫Rspec視圖測試,並且測試沒有通過,但我不知道爲什麼。換句話說,測試寫入的方式沒有錯誤,只是期望不符合結果。愛會幫助解決問題。Rspec查看測試不工作,幫我排除故障

在下面的測試中,我最初認爲問題在於我正在尋找的鏈接位於應用程序佈局的導航欄中。所以按照這篇文章的建議:getting Rspec view specs to render application layout,我明確地調用了要渲染的模板和佈局。但是,仍然無法找到正確的鏈接。

我寫的href標籤直接從實際頁面上的inspect元素中複製。我也試着編寫路由給我的new_request_path,但這也不起作用。

感謝您的幫助!

RSpec的查看測試代碼:

describe 'signups/new.html.erb' do 

it 'displays link to request pages not signup page' do 
    assign(:signup, FactoryGirl.build(:signup)) 
    render template: "signups/new", layout: "layouts/application" 
    rendered.should have_link(href: "/new") 
end 
end 

FYI,檢查元素:

<a class="navbar-brand" href="/new">Make a new request</a> 

FYI,路線:

get 'new', to: 'requests#new', as: 'new_request' 

FYI,應用佈局被呈現:

<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> 

我看不到需要發佈任何來自正在呈現的新模板的內容,因爲hte test只在應用程序佈局內部尋找。 (但它不是基於佈局的視圖測試,因爲1)我正在測試整個頁面,並且佈局中觸發了不同的Flash消息,因爲2)我正在編寫的其他測試[同樣卡住了,但我認爲我可以計算出來,如果我得到一個求助]看看實際的新模板)

+0

在rspec配置中有這個'config.render_views'嗎? –

+0

如果您實際測試佈局,爲什麼這是對signups/new.html.erb視圖的測試? –

+0

@Derek它不是基於佈局的視圖測試,因爲1)我測試整個頁面,並且在佈局中觸發不同的Flash消息,因爲2)我正在編寫的其他測試[同樣卡住了,但我想我可以找出他們,如果我得到一個幫助]看看實際的新模板 – james

回答

1

有點想通了這一點,這裏有一些速記筆記:

  1. Render_view在控制器從來沒有工作過,我只是刪除它 完全(至少控制器測試通過!)
  2. 太可怕了,但理智觀點測試沒有通過是因爲我的 模型被命名爲請求所以我的變量是@request,其中 顯然已經是一個類,所以出現名稱衝突。 I 基本上必須將@request的每個實例都更改爲@requestrecord
  3. 測試中確實存在一些語法錯誤。 have_selector('csstag')必須以a作爲前綴。爲css類或#爲css id。同樣,have_link必須帶有鏈接的名稱,例如,have_link(「Home」,href:root_path)。如果後者可以改變,那就太棒了,因爲我認爲寫一個關於鏈接的書面標題很難,而且很容易改變。
  4. 在兩個經過測試的視圖中,實際視圖中的第一行代碼是if/then語句測試某個變量的表單提交(然後閃爍適當的消息)中的錯誤。這絆住了視野,因爲孤立地說,這些變量從未被定義過。所以在測試中,我必須總是添加一個剛剛通過變量的一些任意數據的before塊。