测试Nokogiri XML的属性

3

如何使用 RSpec 测试以确保元素存在并具有指定的值?

在我的例子中,我想要确保 EnvelopeVersion 具有值 1.0,我还想看到一个测试来确保 EnvelopeVersion 存在。

def self.xml_header
   builder = Nokogiri::XML::Builder.new do |xml|
  xml.Root{
     xml.EnvelopeVersion "1.0"
  }
   end
   builder.to_xml
end

I've tried this, but it failed undefined method `has_node?' for #

it 'should create valid header' do
   doc = GEM::xml_header
   doc.should have_node("EnvelopeVersion ")
end 

2个回答

4
你的方案可以简化:
你的解决方案可以变得更加简单:
doc = Nokogiri::XML::Document.parse(GEM::xml_header)    
doc.xpath('//Root/EnvelopeVersion').text.should eq("1.0")

可以简化为:

doc = Nokogiri::XML(GEM::xml_header)    
doc.at('EnvelopeVersion').text.should eq("1.0")

Nokogiri有两个主要的“查找”方法:searchat。它们是通用的,因为它们都接受XPath和CSS选择器。 search返回所有匹配节点的NodeSet,at返回第一个匹配的节点。
如果你想要更易记的内容,还有at_xpathat_css方法,以及xpathcss

1

我最终在我的测试中使用了nokogiri来解析生成的XML并查询它

require 'nokogiri'

describe 'function' do
  describe '.xml_header' do
    it 'should create valid header' do
        doc = Nokogiri::XML::Document.parse(GEM::xml_header)    
        doc.xpath('//Root/EnvelopeVersion').text.should eq("1.0")
    end     
  end
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接