Rails:在RSpec测试中调用'render'时“缺少部分”

时间:2010-12-13 03:46:58

标签: ruby-on-rails ruby unit-testing view rspec

我正在尝试测试表单的存在。我是Rails的新手。

我的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)>'

有谁知道问题是什么?

谢谢!

3 个答案:

答案 0 :(得分:6)

不要给'render'任何参数。尝试以下

require 'spec_helper'

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

答案 1 :(得分:1)

我遇到了同样的问题,我将描述我为解决这个问题所做的工作,以防您尚未找到解决方案。 我认为问题是rspec在这里报告了一个误导性的错误。真正的错误是别的。

我首先将线路更改为:

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

这允许实际错误浮出水面。在我的情况下,我没有设置必要的变量,我纠正了。

正确设置分配后,规范就可以正常运行。

然后你可以回到:

render "messages/new.html.erb"

甚至只是

render

两者都有效。缺少模板问题应该会消失。至少它对我有用。 :)

答案 2 :(得分:1)

我遇到了类似的问题,并且惊讶地发现Rspec从describe参数做了一些令人印象深刻的推断。例如:

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语句中的路径修复了这一切。