Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

rspec_hpricot_matchers

Package Overview
Dependencies
Maintainers
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

rspec_hpricot_matchers

  • 1.0
  • Rubygems
  • Socket score

Version published
Maintainers
1
Created
Source

= rspec_hpricot_matchers

An implementation of have_tag(), as in rspec_on_rails, but sitting atop Hpricot rather than merely wrapping assert_select().

== Usage

As its first argument, have_tag() accepts any CSS or XPath selectors which are supported by Hpricot.

body.should have_tag('form[@action*=session]')
body.should have_tag('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:

body.should have_tag('h1', 'Welcome')
body.should have_tag('p', /a very important blurb/i)

Expectations can be placed upon the number of matched elements by passing an options hash:

body.should have_tag('abbr', :count => 1)   # exactly one
body.should have_tag('dt',   :minimum => 4) # at least 4
body.should have_tag('dd',   :maximum => 4) # at most 4
body.should have_tag('a.outgoing', /rspec/i, :count => 2)

The :count key also accepts a Range, making the following equivalent:

body.should have_tag('tr',   :count => 3..5)
body.should have_tag('tr',   :minimum => 3,
                             :maximum => 5)

The usage of with_tag(), however, is no longer supported. Instead, a block passed to have_tag() will have each matched element successively yielded to it. If none of the blocks return without raising an ExpectationNotMetError, the outer have_tag() is treated as having failed:

body.should have_tag('thead') do |thead|
  thead.should have_tag('th', :count => 5)
end

This also allows arbitrary expectations to be applied from within the block, such as:

body.should have_tag('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:
body.should have_tag('li[class=?]', dom_class)
body.should have_tag('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 have_tag() further differs from the assert_select-based implementation in that the nested have_tag() 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.

FAQs

Package last updated on 25 Jul 2009

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc