RSpec : tester le contenu d’un content_for

Une spécification de vue sous RSpec pourrait ressembler à ça :

  it "should render column titles" do
    render "/feeds/index.html.erb"
    response.should have_tag("tr>th", "name")
    response.should have_tag("tr>th", "url")
  end

Mais cette méthode ne permet pas de tester les bribes de HTML qui sont produites dans un content_for. En effet, ces bribes sont incluses directement dans le layout, pas dans la production de la vue. Pour ce faire, ajouter dans spec_helper.rb :

  def content_for(name)
    response.template.instance_variable_get("@content_for_#{name}")
  end

Puis dans les specs :

  it "should render a 'New feed' link" do
    render "/feeds/index.html.erb"
    content_for(:somewhere).should have_tag("a[href=?]", new_feed_path)
  end

Merci à Carl-Johan Kihlbom.