如何使用实例变量测试部分

时间:2017-01-20 13:22:55

标签: ruby-on-rails rspec

所以我需要测试一下。部分是通过特定的动作呈现的,它类似于facebook中的消息框。我的测试看起来像这样:

describe 'partials/_partial.js.erb' do
  it 'displays stuff' do
    render
  end
end

我运行它,我知道它做我想要的,因为我马上得到

Failure/Error: if @items.count > 0

     ActionView::Template::Error:
       undefined method `count' for nil:NilClass

我不需要听到在部分中使用实例变量是一种不好的做法,它已经存在并且我需要使用它。那么如何在这里设置@items ...?

更新:

控制器动作如下所示:

def controller_method
    @items = items_method
    render_version(:partial => "partials/_partial.js.erb")
end

1 个答案:

答案 0 :(得分:2)

看起来你正在使用rspec。在这种情况下,您在测试期间定义的任何实例变量都可用于您的视图(无论它是否是部分的)。

describe "users/_messages" do
  before(:each) do
    # This is available in your view.
    @items = []
  end

  it "renders without error when @items is empty" do
    # Will pass, @items is available
    expect { render }.to_not raise_error
  end

  it "shows a count of how many messages there are" do
    # You can modify it before rendering
    @items << Message.new
    render

    expect(rendered).to have_content "You have 1 message"
  end
end