2013-10-01 37 views
1

當節點空白時,使用Nokogiri測試一些XML生成有點麻煩。我正在使用Minitest將生成的XML字符串與模板夾具文件進行比較。由於Minitest將<Node></Node><Node />進行比較,因此我的測試失敗。使用空白節點測試Nokogiri XML生成

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> 

MINITEST輸出

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

正如您所看到的,MiniTest正試圖將自閉標籤與非自閉標籤進行比較,並使測試失敗。奇怪的是,將fixture標籤更改爲自動關閉標籤的結果與完全相同的錯誤消息相同。

這是因爲有時@object.filename是零 - 如果我有一個空白的XML節點(如上面的xml.Header)在我的夾具中使用自閉標籤沒有問題。

+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