Capybara not finding meta tags
The solution was to use :visible => false
either in find
or in have_selector
:
page.should have_css 'meta[name="description"]', visible: false
or:
page.find 'meta[name="description"]', visible: false
If you want to check more specific meta, including the description text, etc:
https://gist.github.com/Lordnibbler/6247531
RSpec::Matchers.define :have_meta do |name, expected|
match do |actual|
has_css?("meta[name='#{name}'][content='#{expected}']")
end
failure_message_for_should do |actual|
actual = first("meta[name='#{name}']")
if actual
"expected that meta #{name} would have content='#{expected}' but was '#{actual[:content]}'"
else
"expected that meta #{name} would exist with content='#{expected}'"
end
end
end
RSpec::Matchers.define :have_title do |expected|
match do |actual|
has_css?("title", :text => expected)
end
failure_message_for_should do |actual|
actual = first("title")
if actual
"expected that title would have been '#{expected}' but was '#{actual.text}'"
else
"expected that title would exist with '#{expected}'"
end
end
end
Then, look up meta like so:
page.should have_meta(:description, 'Brand new Ruby on Rails TShirts')
Borrowed with love from Spree: https://github.com/spree/spree/blob/master/core/lib/spree/testing_support/capybara_ext.rb