0

我有点麻烦 - 不明白为什么我的 rspec 测试开始失败并且找不到 xml。它是使用this实现的。谁能帮我解决这个问题?
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>
4

1 回答 1

1

您链接代码的匹配器无法处理具有不同文本值的两个匹配节点。或者,更准确地说,如果您给它一个选择两个或多个具有不同文本的节点的 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节点,这可能对进一步的断言有用。

于 2013-08-22T17:58:31.337 回答