2010-12-13 38 views
5

我試圖測試窗體的存在。我是Rails新手。Rails:在RSpec測試中調用「渲染」時「缺少部分」

new.html.erb_spec.rb文件的內容是:

require 'spec_helper' 

describe "messages/new.html.erb" do 
    it "should render the form" do 
    render '/messages/new.html.erb' 
    reponse.should have_form_putting_to(@message) 
    with_submit_button 
    end 
end 

視圖本身,new.html.erb,有代碼:

<%= form_for(@message) do |f| %> 
    <%= f.label :msg %> <br /> 
    <%= f.text_area :msg %> 
    <%= f.submit "Submit" %> 
<% end %> 

當我運行rspec,它沒有像這樣:

1) messages/new.html.erb should render the form 

Failure/Error: render '/messages/new.html.erb' 

    Missing partial /messages/new.html with {:handlers=>[:erb, :rjs,:builder,:rhtml, :rxml], :formats=>[:html,:text, :js, :css, :ics, :csv, :xml, :rss, :atom, :yaml, :multipart_form, :url_encoded_form, :json], :locale=>[:en, :en]} in view paths "/Users/tristanmartin/whisperme/app/views" 

    # ./spec/views/messages/new.html.erb_spec.rb:5:in `block (2 levels) in <top (required)>' 

有誰知道問題是什麼?

謝謝!

+0

你可以嘗試使用have_form_posting_to而不是have_form_putting_to,看看你是否仍然收到錯誤? – Raghu 2010-12-13 05:48:37

+0

嘗試從路徑名中刪除前導斜槓。 – zetetic 2010-12-13 09:17:35

+0

謝謝Raghu,我沒注意到我使用了錯誤的方法。儘管如此,仍然收到錯誤。 – WoodenKitty 2010-12-14 00:46:05

回答

6

不給「渲染」任何參數。請嘗試以下

require 'spec_helper' 

describe "messages/new.html.erb" do 
    it "should render the form" do 
    render 
    rendered.should contain('blablabla') 
    end 
end 
+0

有點奇怪,但作品(指定不再工作 - >使用實例變量) – grosser 2010-12-19 20:10:34

1

我經歷過同樣的問題,我會介紹我做了什麼來解決這個問題,如果你還沒有找到解決辦法。 我認爲問題是rspec在這裏報告一個誤導性的錯誤。真正的錯誤是另一回事。

我發現了這一點,首先改變行:

render :template => "messages/new.html.erb" 

這使得實際的錯誤浮出水面。在我的情況下,我沒有設置所需的變量,我糾正了。

正確設置分配後,規格運行正常。

然後你可以回去之一:

render "messages/new.html.erb" 

甚至只是

render 

既會工作。缺失的模板問題應該消失。至少它爲我做了。 :)

1

我碰到類似的問題,並且很驚訝地發現Rspec從描述性的論證中得到了一些令人印象深刻的推論。例如:

require 'spec_helper' 

describe "bills/payments/edit.html.erb" do 
    it "Renders payment form" do 
    assign(:payment, stub_model(Payment)) 
    render 
    end 
end 

由於一些進化控制器/視圖名稱,本次測試原本有:

describe "bills/payment/edit.html.erb" do 

真的搞砸了一切,即使我設置:模板渲染後,將其無法找到引用的部分。修復describe語句中的路徑解決了所有問題。