= TestXml == DESCRIPTION TestXml is a small extension for testing XML/HTML. Extending RSpec and TestUnit it makes asserting and comparing XML snippets easy, and is especially helpful for testing RESTful web services and their XML representations. == FEATURES * Runs with RSpec 2 or 3, Test::Unit, MiniTest and Cucumber * Ruby >= 1.8 * Test XML structure and content == INSTALL gem install test_xml == EXAMPLES === Test::Unit and MiniTest def test_item_representation assert_xml_equal "<item><id>1</id></item>", @item.to_xml end === RSpec it "should contain the id" do @item.to_xml.should equal_xml(<<-XML) <item> <id>1</id> </item> XML end === Cucumber Scenario: When I post some data Then the response should match the following xml """ <transaction> <status>success</status> <id/> <order_id/> </transaction> """ == USAGE: === RSpec In your spec_helper.rb require 'test_xml/spec' And in the actual spec, use these matchers: * equal_xml * contain_xml * equal_xml_structure * contain_xml_structure === Test::Unit In the test_helper.rb require 'test_xml/test_unit' In your test file, use these matchers: * assert_xml_equal * assert_xml_contain * assert_xml_structure_equal * assert_xml_structure_contain Negative assertions are available as <tt>assert_not_*</tt>. === MiniTest In the test_helper.rb require 'test_xml/mini_test' Check the Test::Unit section for available assertions. === Cucumber In the features/env.rb require 'test_xml' require 'test_xml/spec' World(TestXml::Spec) In your steps file e.g. features/step_definitions/xml_steps.rb add this step: Then /^the response should match the following xml$/ do |xml| response.body.should equal_xml(xml) end == ASSERTIONS === XML is Equal Elements, attributes and text nodes are all the same === XML Contains The XML contains the given structure. Checks ancestral relationships, elements, attributes and text nodes <b>starting from and including the root node</b>. For example, given this XML: <a> <b><c>Cee</c></b> <d>Dee</b> </a> This will fail: <b><c>Cee</c></b> as +b+ is not the root node. The check must be written as: <a> <b><c>Cee</c></b> </a> === XML Structure is Equal Like XML is equal, but ignores attributes and text nodes === XML Structure Contains Like XML contains, but ignores attributes and text nodes == REQUIREMENTS * nokogiri == Many Thanks {Nick Sutterer}[http://github.com/apotonick] thank you for bringing RSpec 2, Ruby 1.9.2 and MiniTest! You revived the gem! :) == LICENSE Copyright © 2010-2011, Pavel Gabriel Released under the MIT License.