Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.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 rspec have_xml失败,但错误消息显示存在元素_Ruby On Rails_Ruby_Xml_Xpath_Rspec - Fatal编程技术网

Ruby on rails rspec have_xml失败,但错误消息显示存在元素

Ruby on rails rspec have_xml失败,但错误消息显示存在元素,ruby-on-rails,ruby,xml,xpath,rspec,Ruby On Rails,Ruby,Xml,Xpath,Rspec,我有点麻烦-不明白为什么我的rspec测试开始失败,并且找不到xml。它是使用。有人能帮我解决这个问题吗? Rspec测试: response.status.should == 200 response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s) 和控制台的输出: Failure/Error: response.body.should have_xml('/Pho

我有点麻烦-不明白为什么我的rspec测试开始失败,并且找不到xml。它是使用。有人能帮我解决这个问题吗?
Rspec测试:

response.status.should == 200
response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s)
和控制台的输出:

   Failure/Error: response.body.should have_xml('/PhoneBook/PhoneBookEntries/Contact/Id', @new_contact.id.to_s)
       expected to find xml tag /PhoneBook/PhoneBookEntries/Contact/Id in:
       <PhoneBook>
         <APIVersion>1.0</APIVersion>
         <SyncTime>1377192796</SyncTime>
         <PhoneBookEntries>
           <Contact>
             <Id>182</Id>
             <Avatar>
               <type>PNG</type>
               <data>iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQAAAACjtFqAAAAABGdBTUEAALGP
       C/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUw
       AADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAAHdihOkAAAACXBIWXMAAABIAAAA
       SABGyWs+AAAAIklEQVRIx+3IMQEAAAwCIPuX1gJrMDhJD5FSSimllFLKfznP
       BnQ17b9ZHAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wOC0yMlQyMDozMzox
       NiswMzowMDdI2UsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDgtMjJUMjA6
       MzM6MTYrMDM6MDBGFWH3AAAAAElFTkSuQmCC
       </data>
               <Modified>1377192796</Modified>
             </Avatar>
           </Contact>
           <Contact>
             <Id>183</Id>
             <Avatar>
               <type>PNG</type>
               <data>iVBORw0KGgoAAAANSUhEUgAAAKAAAACgAQAAAACjtFqAAAAABGdBTUEAALGP
       C/xhBQAAAAFzUkdCAK7OHOkAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUw
       AADqYAAAOpgAABdwnLpRPAAAAAJiS0dEAAHdihOkAAAACXBIWXMAAABIAAAA
       SABGyWs+AAAAIklEQVRIx+3IMQEAAAwCIPuX1gJrMDhJD5FSSimllFLKfznP
       BnQ17b9ZHAAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMy0wOC0yMlQyMDozMzox
       NiswMzowMDdI2UsAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTMtMDgtMjJUMjA6
       MzM6MTYrMDM6MDBGFWH3AAAAAElFTkSuQmCC
       </data>
               <Modified>1345656796</Modified>
             </Avatar>
           </Contact>
         </PhoneBookEntries>
       </PhoneBook>
Failure/Error:response.body.should_xml('/PhoneBook/PhoneBookEntries/Contact/Id',@new_Contact.Id.to_s)
应在以下位置找到xml标记/PhoneBook/PhoneBookEntries/Contact/Id:
1
1377192796
182
巴布亚新几内亚
IVBORW0KGGOAAAANSUHEUGAAACQAAACJTFQAAABGDBTUEAALGP
C/XHBQAAFZUKDCAK7OHOKAAAGY0HSTQAAEIYAAICAAD6AAAGOGAHUW
AADQYAAAOPGAABDWNLPPAAAJAJIS0DEADHIHOKAAAACXBIWXMAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAWCIPUX1GJRMDHJD5FSSIMLLFLKFZNP
BNQ17B9ZHAAACV0RVH0ZGF0ZTPJCMVHDGUAMJAXMY0WOC0YMLQYMDOZOX
Niswmzowmddi2USAAALDEVEYDGRHDGU6BW9KAWZ5ADIWMTMDGTMJJJUMJA6
MZM6MTRMDM6MDBGFW3AAAAELFTKSUQMCC
1377192796
183
巴布亚新几内亚
IVBORW0KGGOAAAANSUHEUGAAACQAAACJTFQAAABGDBTUEAALGP
C/XHBQAAFZUKDCAK7OHOKAAAGY0HSTQAAEIYAAICAAD6AAAGOGAHUW
AADQYAAAOPGAABDWNLPPAAAJAJIS0DEADHIHOKAAAACXBIWXMAABIAAAA
SABGyWs+AAAAIklEQVRIx+3IMQEAAWCIPUX1GJRMDHJD5FSSIMLLFLKFZNP
BNQ17B9ZHAAACV0RVH0ZGF0ZTPJCMVHDGUAMJAXMY0WOC0YMLQYMDOZOX
Niswmzowmddi2USAAALDEVEYDGRHDGU6BW9KAWZ5ADIWMTMDGTMJJJUMJA6
MZM6MTRMDM6MDBGFW3AAAAELFTKSUQMCC
1345656796

为其链接代码的匹配器无法处理具有不同文本值的两个匹配节点。或者,更准确地说,如果给它一个选择两个或多个具有不同文本的节点的xpath,它将始终无法匹配

您的XML有两个匹配的xpath节点
/PhoneBook/PhoneBookEntries/Contact/Id
,这些匹配不会同时包含包含相同字符串Id的文本。这就是匹配失败的原因

在不修复匹配器的情况下,最简单的方法可能是在xpath中只选择一个要匹配的节点,并在不提供第二个文本参数时依赖该行为

response.body.should have_xml( 
   "/PhoneBook/PhoneBookEntries/Contact[Id='#{@new_contact.id}']" )
这会将匹配到Id的内容移动到xpath查询本身中,因此获取匹配节点意味着您已经发现要断言的Id已经添加。xpath选择匹配的
Contact
节点,而不是
Id
节点,这对于进一步的断言可能很有用