mirror of
https://github.com/drapergem/draper
synced 2023-03-27 23:21:17 -04:00
50 lines
890 B
Ruby
50 lines
890 B
Ruby
require 'capybara'
|
|
|
|
module HaveTextMatcher
|
|
def have_text(text)
|
|
HaveText.new(text)
|
|
end
|
|
|
|
class HaveText
|
|
def initialize(text)
|
|
@text = text
|
|
end
|
|
|
|
def in(css)
|
|
@css = css
|
|
self
|
|
end
|
|
|
|
def matches?(subject)
|
|
@subject = Capybara.string(subject)
|
|
|
|
@subject.has_css?(@css || "*", text: @text)
|
|
end
|
|
|
|
def failure_message_for_should
|
|
"expected to find #{@text.inspect} #{within}"
|
|
end
|
|
|
|
def failure_message_for_should_not
|
|
"expected not to find #{@text.inspect} #{within}"
|
|
end
|
|
|
|
private
|
|
|
|
def within
|
|
if @css && @subject.has_css?(@css)
|
|
"within\n#{@subject.find(@css).native}"
|
|
else
|
|
"#{inside} within\n#{@subject.native}"
|
|
end
|
|
end
|
|
|
|
def inside
|
|
@css ? "inside #{@css.inspect}" : "anywhere"
|
|
end
|
|
end
|
|
end
|
|
|
|
RSpec.configure do |config|
|
|
config.include HaveTextMatcher
|
|
end
|