RSpec matcher to validate sitemaps
We use the gem rspec-sitemap-matchers
to validate and parse some sitemap files, but it can’t validate against the sitemap standard XSD, so here’s the code snippet.
./spec/support/matchers/valid_sitemap_matcher.rb
require 'rspec/expectations'
module ValidSitemapExpectations
extend RSpec::Matchers::DSL
sitemap_xsd = Nokogiri::XML::Schema(File.open('sitemap.xsd'))
sitemap_index_xsd = Nokogiri::XML::Schema(File.open('sitemapindex.xsd'))
matcher :have_valid_sitemap_xml do
match do |thing|
doc = Nokogiri::XML(thing)
sitemap_xsd.valid?(doc)
end
failure_message do |thing|
doc = Nokogiri::XML(thing)
errors = sitemap_xsd.validate(doc).map(&:message).join("\n")
"Was not valid sitemap XML.\n\n#{errors}\n"
end
end
matcher :have_valid_sitemap_index_xml do
match do |thing|
doc = Nokogiri::XML(thing)
sitemap_index_xsd.valid?(doc)
end
failure_message do |thing|
doc = Nokogiri::XML(thing)
errors = sitemap_index_xsd.validate(doc).map(&:message).join("\n")
"Was not valid sitemap index XML.\n\n#{errors}\n"
end
end
end
This is used in RSpec expectations to ensure that the sitemap generated is valid against the sitemap standard.
This post is licensed under
CC BY 4.0
by the author.