Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 测试Nokogiri XML的属性_Ruby On Rails_Xml_Rspec_Tdd_Nokogiri - Fatal编程技术网

Ruby on rails 测试Nokogiri XML的属性

Ruby on rails 测试Nokogiri XML的属性,ruby-on-rails,xml,rspec,tdd,nokogiri,Ruby On Rails,Xml,Rspec,Tdd,Nokogiri,使用RSpec我如何/应该进行测试以确保元素存在并具有指定的值 在我的示例中,我希望确保有一个值为1.0的EnveloperVersion,我还希望看到一个测试,以确保EnveloperVersion存在 def self.xml_header builder = Nokogiri::XML::Builder.new do |xml| xml.Root{ xml.EnvelopeVersion "1.0" } end builder.to_xml end 我

使用RSpec我如何/应该进行测试以确保元素存在并具有指定的值

在我的示例中,我希望确保有一个值为1.0的EnveloperVersion,我还希望看到一个测试,以确保EnveloperVersion存在

def self.xml_header
   builder = Nokogiri::XML::Builder.new do |xml|
  xml.Root{
     xml.EnvelopeVersion "1.0"
  }
   end
   builder.to_xml
end
我尝试过这个,但是失败了,因为没有定义方法“has\u node”#
it 'should create valid header' do
   doc = GEM::xml_header
   doc.should have_node("EnvelopeVersion ")
end 

我最终在测试中使用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

您的解决方案可以简化:

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有两种主要的“查找”方法:和。它们是通用的,因为它们同时接受XPath和CSS访问器
search
返回所有匹配节点的节点集,
at
返回匹配的第一个节点

还有一些方法,如果你想要一些更容易记忆的东西,还有和