Hi,

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
    else
      concat content_tag(:div, field, :class => 'error')
    end
  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] = [
          'Error'
        ]
        
        output = eval_erb <<-ERB
          <% wrap_error_field @errors do %>
            <p>Block</p>
            <% end %>
        ERB
        
        assert_xhtml output do
          div.error do
            p 'Block'
          end
        end
        
      end # it should wrap the block in div.error
      
    end # when there is an error
    
  end # describe field_error_helper
  
end
end

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.

Thanks,
Brandon

_______________________________________________
rspec-users mailing list
rspec-users@rubyforge.org
http://rubyforge.org/mailman/listinfo/rspec-users

Reply via email to