【问题标题】:Rails: "missing partial" when calling 'render' in RSpec testRails:在 RSpec 测试中调用“渲染”时“缺少部分”
【发布时间】:2011-05-24 11:08:04
【问题描述】:

我正在尝试测试是否存在表单。我是 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)>'

有谁知道问题出在哪里?

谢谢!

【问题讨论】:

  • 您可以尝试使用 have_form_posting_to 而不是 have_form_putting_to 看看您是否仍然遇到错误?
  • 尝试从路径名中删除前导斜杠。
  • 感谢 Raghu,我没有注意到我使用了错误的方法。但仍然出现错误。
  • 我从路径名中删除了前导斜杠,但仍然出现错误。

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


【解决方案1】:

不要为“渲染”提供任何参数。试试下面的

require 'spec_helper'

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

【讨论】:

  • 有点奇怪,但有效(赋值不再有效 -> 使用实例变量)
【解决方案2】:

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

我首先将行更改为:

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

这使得实际错误浮出水面。在我的情况下,我没有设置所需的变量,我更正了。

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

然后你可以返回任一:

render "messages/new.html.erb"

甚至只是

render

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

【讨论】:

    【解决方案3】:

    我遇到了类似的问题,并且惊讶地发现 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
    

    这真的把一切都搞砸了,即使我在渲染后设置了 :template,它也无法找到引用的部分。修复 describe 语句中的路径修复了这一切。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2015-01-29
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多