2013-10-01 5 views
1

У меня возникли проблемы с тестированием некоторого поколения XML с использованием Nokogiri, когда узел пуст. Я использую Minitest для сравнения сгенерированной строки XML с файлом привязки шаблона. Мой тест завершился неудачей с пустым узлом, так как Minitest сравнивает <Node></Node> с <Node />.Тестирование генерации XML Nokogiri с пустыми узлами

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 пытается сравнить самозакрывающийся тег с несамостоятельным тегом и сделать тест неудачным. Изменение тега прибора на самозакрывающееся приводит, как ни странно, к точному же сообщению об ошибке.

Это потому, что иногда @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 
Смежные вопросы