2013-08-22 80 views
0

我有點麻煩 - 無法理解爲什麼我的rspec測試開始失敗並找不到xml。它使用this實施。任何人都可以幫我解決這個問題嗎?
Rspec的測試:rspec have_xml失敗,但錯誤消息顯示元素的存在

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> 

回答

1

您鏈接代碼的匹配不能與具有不同的文本值的兩個匹配的節點處理。或者,更準確地說,如果您給它一個選擇兩個或更多具有不同文本節點的xpath,它將始終無法匹配。

您的XML有兩個匹配節點xpath /PhoneBook/PhoneBookEntries/Contact/Id,這些匹配不會都包含相同字符串ID的文本。這就是爲什麼你的比賽失敗。

可能沒有固定的匹配,以最簡單的做法是隻選擇一個節點以匹配XPath和依靠行爲時,不提供第二個文本PARAM

response.body.should have_xml( 
    "/PhoneBook/PhoneBookEntries/Contact[Id='#{@new_contact.id}']") 

這使匹配標識到xpath查詢本身,因此獲取匹配的節點意味着您已經找到了想要聲明的Id已被添加。 xpath會選擇匹配的節點Contact,而不是Id節點,這對於進一步的斷言可能會有用。

相關問題