marnen: (Default)
[personal profile] marnen

This probably won't be of interest to anyone who isn't a Ruby on Rails developer, but since it seems that the thing to do in the Rails community is share tips in blog posts, I thought I might as well jump on the bandwagon.

content_for is a great method to use in Rails views, but I found it hard to test in RSpec -- I couldn't mock the right object to test for the method call, and I couldn't figure out how to get the content variable out of the response. Then I stumbled on RSpec patch 12701, which was incorporated into RSpec releases some time ago (it's in 1.1.3, certainly, and I don't know how far back it goes). It seems that while response can be tested for the main body of the response, anything defined with content_for is available as if it were a hash element. So if your view looks like:

<% content_for :sidebar do %>
  <p>Here's my sidebar text.</p>
<% end %>

<p>And here's my main content.</p>
then you can write a spec that looks something like
describe "my view" do
  before(:each) do
    render 'myview'
  end

  it "should populate the body content" do
    response.should have_tag("p", /main content/)
  end

  it "should populate the sidebar" do
    response[:sidebar].should have_tag("p", /sidebar/)
  end
end
I just went through an hour or two of pain before stumbling on this, so I thought I'd save everyone else some trouble.

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

marnen: (Default)
Marnen Laibow-Koser

April 2014

S M T W T F S
  12 345
6789101112
13141516171819
20212223242526
27282930   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 17th, 2025 06:29 am
Powered by Dreamwidth Studios