views:

438

answers:

1

I have been writing specs for controllers and models, but I have never written a helper spec. I have no idea where I start.

I have the following snippet in application_helper.rb

  def title(page_title)
    content_for(:title) { page_title }
  end
  • How should I write a helper spec on the code?
  • Also if there's any open-source Rails app to show good helper testing/specing, do let me know.
A: 

RSpec should automatically load classes and modules from your rails environment when you 'describe' them, so a valid helper spec could be:

#deleted

But remember that bdd is not testing every single method but the behaviour of your application.

edit:

as @Ken said, my spec was not correct, It was definately the wrong way to do it. So I came out with a Request spec solution that I like more than an Helper spec.

# inside your helper
def title(page_title)
  content_for(:title) { page_title }
end

# views/resource/index.html.*
<%= title "foo" %>

# request spec
require 'spec_helper'

describe YourResource do
  it "should output content for title"
    get "/resource"
    response.body.should =~ /<title>foo<\/title>/
  end
end

otherwise, if you want to test only the helper behavior (because it's critical or because you don't have any views) @Ken's solution is better.

makevoid
Thanks so much for your example. Right BDD is not about covering every method. Most helper methods are touched by Cucumber/Rcov coverage.
TK
This doesn't test much since content_for returns nil. You should render a page and assert_select "title" contains what you expect.
Ken Mayer