Rubies: My quest to get the maximum coverage & diagnostics from the leanest possible tests has reached a new level. This is a Rails functional test on an HTML form: user = users(:Moses) get :edit_user, :id => user.id assert_xhtml do form :action => ''/users'' do fieldset do legend ''Personal Information'' label ''First name'' input :type => ''text'', :name => ''user[first_name]'' :value => user.first_name end end end That''s all. The assertion expects a form with a given action, containing a fieldset, a legend, a label, and a populated text input field. The assertion forgives any other details, such as intervening structural tags, and complains if any required detail is missing, out of order, or ill-formed. You test HTML by writing an example of what you expect, excluding details you don''t care about. When it fails, the assertion will print out your reference HTML, and your sample HTML from your web page. The assertion faults if... - any attribute does not match exactly - any text content does not match, stripped - any node is not found at all - any node is found out of order The assertion does not fail if - nodes contain un-specified attributes - the DOM contains any un-specified tags (<html>, <div>, etc.) Here''s the assertion checking that a list appears in collating order: assert_xhtml SAMPLE_LIST do ul :style => ''font-size: 18'' do li ''model'' do li ''Billings criteria'' li ''Billings report'' li ''Sales report'' end end end The assertion takes a block that renders into a Nokogiri::HTML::Builder. Any HTML it can build, you can specify by example. That freedom causes two issues: The ''self'' context is different inside this block, so you must pass variables in as closures. And an element with the same name as a Builder method, such as .select, need a bang: .select! Get the assertion, from assert2-0.3.8.gem, with these incantations: gem install assert2 nokogiri require ''assert2/xhtml'' # for Test::Unit::TestCase and derivatives Those of you using RSpec will know how to apply this Gist: http://gist.github.com/76136 Good hunting! -- Phlip http://www.zeroplayer.com/ --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "merb" group. To post to this group, send email to merb-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to merb+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/merb?hl=en -~----------~----~----~----~------~----~------~--~---