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.
-
Runs with RSpec 2 or 3, Test::Unit, MiniTest and Cucumber
-
Ruby >= 1.8
-
Test XML structure and content
gem install test_xml
def test_item_representation assert_xml_equal "<item><id>1</id></item>", @item.to_xml end
it "should contain the id" do @item.to_xml.should equal_xml(<<-XML) <item> <id>1</id> </item> XML end
Scenario: When I post some data Then the response should match the following xml """ <transaction> <status>success</status> <id/> <order_id/> </transaction> """
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
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 assert_not_*
.
In the test_helper.rb
require 'test_xml/mini_test'
Check the Test::Unit section for available assertions.
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
Elements, attributes and text nodes are all the same
The XML contains the given structure. Checks ancestral relationships, elements, attributes and text nodes starting from and including the root node.
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>
Like XML is equal, but ignores attributes and text nodes
Like XML contains, but ignores attributes and text nodes
-
nokogiri
Nick Sutterer thank you for bringing RSpec 2, Ruby 1.9.2 and MiniTest! You revived the gem! :)
Copyright © 2010-2011, Pavel Gabriel
Released under the MIT License.