使用空白节点测试Nokogiri XML生成

时间:2013-10-01 20:43:11

标签: ruby xml nokogiri minitest

当节点空白时,使用Nokogiri测试一些XML生成时遇到了一些麻烦。我正在使用Minitest将生成的XML字符串与模板fixture文件进行比较。我的测试因空白节点而失败,因为Minitest正在将<Node></Node><Node />进行比较。

XML生成

builder = Nokogiri::XML::Builder.new encoding: "UTF-8" do |xml|
  xml.Header
  xml.FileName @object.filename
end

模板文件

这是我在测试中用作夹具的文件

<?xml version="1.0" encoding="UTF-8"?>
  <Header/>
  <FileName></FileName>

最小输出

3) Failure:
--- expected
+++ actual
@@ -25,7 +25,7 @@
       <Header />
-          <FileName/>
+          <FileName></FileName>

正如您所看到的,MiniTest正在尝试将自动关闭标签与非自动关闭标签进行比较,并使测试失败。将夹具标签更改为自动关闭标签会奇怪地导致完全相同的错误消息。

这是因为有时候@object.filename是零 - 如果我有一个空白的XML节点(如上面xml.Header中所述),在我的灯具中使用自闭标签就没有问题。

1 个答案:

答案 0 :(得分:0)

在这种情况下我会使用XML架构:

def test_that_xml_data_conforms_to_schema
  xml_data = ...
  schema_data = ...
  fragment = Nokogiri::XML.parse(xml_data)                                                                                     
  schema = Nokogiri::XML::Schema(schema_data)                                                                                  
  assert schema.valid?(fragment)
end