Join GitHub today
GitHub is home to over 20 million developers working together to host and review code, manage projects, and build software together.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
|Failed to load latest commit information.|
= rspec_hpricot_matchers A matcher similar to RSpec's +#have_tag+ sitting atop Hpricot rather than wrapping +#assert_select+. == Usage Include RspecHpricotMatchers in your +spec_helper+: Spec::Runner.configure do |config| config.include RspecHpricotMatchers end As its first argument, match_element() accepts any CSS or XPath selectors which are supported by Hpricot. response.should match_element('form[@action*=session]') response.should match_element('ul > li + li') Expectations can be placed upon the inner text of the matched element by providing another argument, which should be either a String or a Regexp: response.should match_element('h1', 'Welcome') response.should match_element('p', /a very important blurb/i) Expectations can be placed upon the number of matched elements by passing an options hash: response.should match_element('abbr', :count => 1) # exactly one response.should match_element('dt', :minimum => 4) # at least 4 response.should match_element('dd', :maximum => 4) # at most 4 response.should match_element('a.outgoing', /rspec/i, :count => 2) The :count key also accepts a Range, making the following equivalent: response.should match_element('tr', :count => 3..5) response.should match_element('tr', :minimum => 3, :maximum => 5) A block can be passed to #match_element to search for elements within the matched element: response.should match_element('thead') do |thead| thead.should match_element('th', :count => 5) end This also allows arbitrary expectations to be applied from within the block, such as: response.should match_element('dl dd.sha1') do |dd| dd.inner_text.length.should == 40 end == Notes Currently, this implementation does not support substitution values as assert_select did (by way of HTML::Selector): # Not yet supported: response.should match_element('li[class=?]', dom_class) response.should match_element('tr.person#?', /^person-\d+$/) I personally rarely use these, and Hpricot's advanced selectors make them mostly useless, as far as I can tell, so I am unlikely to implement them myself. This match_element() further differs from the assert_select-based implementation in that the nested match_element() calls must *all* pass on a single selected element in order to be true. This was a source of confusion in RSpec ticket #316. There is a spec covering this case if you need an example.