I am trying to write and test a helper that accepts a block. Right now
goes something like this:
Wraps a field with div.error if it has an error.
def wrap_error_field errors, &block
field = capture &block
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
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
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
executed, and I can’t figure out why, and that’s slightly annoying.