1

当节点为空白时,我在使用 Nokogiri 测试一些 XML 生成时遇到了一些麻烦。我正在使用 Minitest 将生成的 XML 字符串与模板夹具文件进行比较。我的测试因 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是 nil - 如果我有一个空白 XML 节点(如上xml.Header所示),在我的夹具中使用自闭合标签就没有问题。

4

1 回答 1

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
于 2014-06-18T14:13:11.970 回答