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
Hi, Well, I googled some more, and everything I could find used eval_erb. So is this the best method for testing helpers with blocks? And then why is that block displaying when I run the test? Thanks, Brandon> -----Original Message----- > From: Brandon Olivares [mailto:programmer2188 at gmail.com] > Sent: Wednesday, April 08, 2009 6:25 AM > To: ''rspec-users'' > Subject: Testing helpers that accept a block > > 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
> assert_xhtml output do > div.error do > p ''Block'' > end > endNokogiri has some "easter eggs" in its ambitious HTML::Builder system. One of them is only HTML tags not already recognized as methods can get turned into HTML tags. The usual .method_missing() abuse. The fix is: assert_xhtml output do div.error do p! ''Block'' end end (Also .be_html_with might work by now... 0.4.9?) Aaron P. is pondering this issue even now in his subconscious, but I only ought to feed him one feature request at a time and a couple others are ahead in the queue, so my ! trick has to work for the near future...
Hi, Oh, I should have thought of that. Thanks a lot. I''m growing used to the assert_xhtml syntax, lol, so I''ve just been using that. Thank you though for fixing the be_html_with syntax. Brandon> -----Original Message----- > From: rspec-users-bounces at rubyforge.org [mailto:rspec-users- > bounces at rubyforge.org] On Behalf Of Phlip > Sent: Wednesday, April 08, 2009 11:54 PM > To: rspec-users at rubyforge.org > Subject: Re: [rspec-users] Testing helpers that accept a block > > > assert_xhtml output do > > div.error do > > p ''Block'' > > end > > end > > Nokogiri has some "easter eggs" in its ambitious HTML::Builder system. > One of > them is only HTML tags not already recognized as methods can get turned > into > HTML tags. The usual .method_missing() abuse. > > The fix is: > > assert_xhtml output do > div.error do > p! ''Block'' > end > end > > (Also .be_html_with might work by now... 0.4.9?) > > Aaron P. is pondering this issue even now in his subconscious, but I > only ought > to feed him one feature request at a time and a couple others are ahead > in the > queue, so my ! trick has to work for the near future... > > _______________________________________________ > rspec-users mailing list > rspec-users at rubyforge.org > http://rubyforge.org/mailman/listinfo/rspec-users