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 assert_not_*
.
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 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>
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 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.