当节点空白时,使用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
中所述),在我的灯具中使用自闭标签就没有问题。
答案 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