Kristian Mandrup
2010-Aug-23 14:04 UTC
[rspec-users] How do I write specs for Rails 3 view block helpers that use #with_output_buffer(&block) ?
I found this: http://stackoverflow.com/questions/197164/how-do-i-test-rails-block-helpers-with-rspec it ''should do something'' do helper.some_block_helper { the_block_code }.should XXXX end but not sure how to use it I have a module which is extended on top of ActiveView::Base module MyViewExt def area(clazz, &block) content = with_output_buffer(&block) content_tag :div, content, :class => clazz end end How would I go about testing this in isolation, especially that the effect of using #with_output_buffer(&block) is as expected (especially when I have nested calls of view helpers using this approach!). Thanks.
Kristian Mandrup
2010-Aug-23 18:51 UTC
[rspec-users] How do I write specs for Rails 3 view block helpers that use #with_output_buffer(&block) ?
I have finally come up with a workable solution http://gist.github.com/545866 module MyViewHelper def tab_for(clazz, &block) content = with_output_buffer(&block) content_tag :li, content, :class => clazz end end module MyOtherViewHelper ... end describe "do it" do it "works" do ActionViewTester.tests MyViewHelper, MyOtherViewHelper ActionViewTester.new do |helper| helper.tab_for(''kristian'') { ''hello'' }.should match /kristian/ helper.hello(''david'') { ''hello'' }.should match /david/ end end end On Aug 23, 4:04?pm, Kristian Mandrup <kmandrup.git... at gmail.com> wrote:> I found this:http://stackoverflow.com/questions/197164/how-do-i-test-rails-block-h... > > ? it ''should do something'' do > ? ? helper.some_block_helper { the_block_code }.should XXXX > ? end > > but not sure how to use it > > I have a module which is extended on top of ActiveView::Base > > module MyViewExt > ? ? def area(clazz, &block) > ? ? ? content = with_output_buffer(&block) > ? ? ? content_tag :div, content, :class => clazz > ? ? end > end > > How would I go about testing this in isolation, especially that the > effect of using #with_output_buffer(&block) > is as expected (especially when I have nested calls of view helpers > using this approach!). > > Thanks. > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users
Kristian Mandrup
2010-Aug-23 19:41 UTC
[rspec-users] How do I write specs for Rails 3 view block helpers that use #with_output_buffer(&block) ?
I packed it up into a useful reusable gem ;) http://github.com/kristianmandrup/rspec-action_view Only these dependencies :) require ''rspec'' require ''action_view'' require ''active_support/railtie'' require ''action_view/template/handlers/erb'' Now allows for this DSL describe "My ViewHelpers" do it "should render content as expected" do setup_action_view do tests MyViewHelper, MyOtherViewHelper end with_action_view do |view| view.tab_for(''kristian'') { ''hello'' }.should match /kristian/ view.hello(''david'') { ''hello'' }.should match /david/ with_action_view do |view| view.with_template(%{ <%= tab_for(''kristian'') { ''hello'' } %> }).should match /hello/ end end end Enjoy! On Aug 23, 8:51?pm, Kristian Mandrup <kmandrup.git... at gmail.com> wrote:> I have finally come up with a workable solution > > http://gist.github.com/545866 > > module MyViewHelper > ? def tab_for(clazz, &block) > ? ? content = with_output_buffer(&block) > ? ? content_tag :li, content, :class => clazz > ? end > end > > module MyOtherViewHelper > ... > end > > describe "do it" do > ? it "works" do > ? ? ActionViewTester.tests MyViewHelper, MyOtherViewHelper > ? ? ActionViewTester.new do |helper| > ? ? ? helper.tab_for(''kristian'') { ''hello'' }.should match /kristian/ > ? ? ? helper.hello(''david'') { ''hello'' }.should match /david/ > ? ? end > ? end > end > > On Aug 23, 4:04?pm, Kristian Mandrup <kmandrup.git... at gmail.com> > wrote: > > > I found this:http://stackoverflow.com/questions/197164/how-do-i-test-rails-block-h... > > > ? it ''should do something'' do > > ? ? helper.some_block_helper { the_block_code }.should XXXX > > ? end > > > but not sure how to use it > > > I have a module which is extended on top of ActiveView::Base > > > module MyViewExt > > ? ? def area(clazz, &block) > > ? ? ? content = with_output_buffer(&block) > > ? ? ? content_tag :div, content, :class => clazz > > ? ? end > > end > > > How would I go about testing this in isolation, especially that the > > effect of using #with_output_buffer(&block) > > is as expected (especially when I have nested calls of view helpers > > using this approach!). > > > Thanks. > > _______________________________________________ > > rspec-users mailing list > > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users > > _______________________________________________ > rspec-users mailing list > rspec-us... at rubyforge.orghttp://rubyforge.org/mailman/listinfo/rspec-users