= TestXml == DESCRIPTION: TestXml is a small extension for RSpec and TestUnit for XML/HTML testing. I have found it very useful for API testing with our Cucumber tests. == FEATURES: * test XML with: RSpec, Test::Unit, Cucumber * test XML structure (partially or fully matched) * test the element values within XML structure == EXAMPLES: === Cucumber feature Scenario: Given data When I post the data The I receive successful response And response matches the following xml """ <transaction> <status>success</status> <id/> <order_id/> </transaction> """ The scenario will check: * 'status' element and its value. * 'id' and 'order_id' elements are present in XML == USAGE: === RSpec in spec_helper.rb require 'test_xml' require 'test_xml/spec' in spec file: it "should match_xml" do xml = <<-XML <root> <one>1</one> <two>2</two> </root> XML xml.should match_xml(<<-XML) <root> <one>1</one> <two>2</two> </root> XML end === Implemented matchers * match_xml * exactly_match_xml * match_xml_structure * exactly_match_xml_structure === With Test::Unit in test_helper.rb require 'test_xml' require 'test_xml/test_unit' in test file: def test_that_xml_matches xml = <<-XML <root> <one>1</one> </root> XML assert_match_xml(xml) do <<-XML <root> <one>1</one> </root> XML end end === Implemented assertions * assert_match_xml * assert_exactly_match_xml * assert_match_xml_structure * assert_exactly_match_xml_structure with assert_not_* === With Cucumber Add to features/env.rb require 'test_xml' require 'test_xml/spec' World(TestXml::Spec) And you can add the following step: Then /^response matches the following xml$/ do |string| response.body.should match_xml(string) end == REQUIREMENTS test_xml depends on Nokogiri == INSTALL [sudo] gem install test_xml