[rspec-users] Testing helpers that accept a block

Brandon Olivares programmer2188 at gmail.com
Wed Apr 8 06:25:05 EDT 2009


I am trying to write and test a helper that accepts a block. Right now it
goes something like this:

module ContactHelper
  # Wraps a field with div.error if it has an error.
  def wrap_error_field errors, &block
    field = capture &block
    if errors.empty?
      concat field
      concat content_tag(:div, field, :class => 'error')
  end # field_error_helper
This is my first time writing a helper, so please tell me if I'm wrong.

Then, I tried to test it, but couldn't figure it out, since it seems the
method won't actually return anything due to the use of concat. The best I
could figure out for now was to use eval_erb.

require File.expand_path(File.dirname(__FILE__) + '/../spec_helper')

describe ContactHelper do
  describe "field_error_helper" do
    context "when there is an error" do
      it "should wrap the block in div.error" do
        assigns[:errors] = [
        output = eval_erb <<-ERB
          <% wrap_error_field @errors do %>
            <% end %>
        assert_xhtml output do
          div.error do
            p 'Block'
      end # it should wrap the block in div.error
    end # when there is an error
  end # describe field_error_helper

Is that the best/only method? I'm not sure how much I really like it.

Further, when I run the tests, it always outputs "Block" before the test is
executed, and I can't figure out why, and that's slightly annoying.


More information about the rspec-users mailing list