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.

(deleted comment)

Date: 2008-03-28 10:01 pm (UTC)
From: [identity profile] marnen.livejournal.com
Well, as you might have seen from the first paragraph, this is a tip regarding Ruby on Rails development.

I don't think I'll be around the weekend of 12 April (I'll probably be at Æthelmearc coronation, since I know the princess's father and have met the princess herself once or twice). But I'd be happy to talk about your fiddle some other time...

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. 8th, 2025 09:01 pm
Powered by Dreamwidth Studios