teamcapybara--capybara/lib/capybara/rspec_matchers.rb

46 lines
1.3 KiB
Ruby
Raw Normal View History

module Capybara
module RSpecMatchers
extend ::RSpec::Matchers::DSL
%w[css xpath selector].each do |type|
matcher "have_#{type}" do |*args|
match_for_should do |actual|
wrap(actual).send("has_#{type}?", *args)
end
match_for_should_not do |actual|
wrap(actual).send("has_no_#{type}?", *args)
end
failure_message_for_should do |actual|
if normalized[:selector].failure_message
normalized[:selector].failure_message.call(wrap(actual))
else
"expected #{normalized[:selector].name} #{normalized[:locator].inspect} to return something from:\n#{actual.inspect}"
end
end
failure_message_for_should_not do |actual|
2011-02-04 15:40:26 +00:00
"expected #{normalized[:selector].name} #{normalized[:locator].inspect} not to return anything from:\n#{actual.inspect}"
end
define_method :wrap do |actual|
if actual.respond_to?("has_#{type}?")
actual
else
Capybara.string(actual.to_s)
end
end
2011-02-04 15:40:26 +00:00
define_method :normalized do
@normalized ||= if type == "selector"
Capybara::Selector.normalize(*args)
else
Capybara::Selector.normalize(type.to_sym, *args)
end
end
end
end
end
end