2015-08-21 80 views
0

我有一個API端點,它返回一個XML響應。我想要測試一部分響應。預期xml響應中至少有一個元素

我有一個shop模型,引用另一個表shop_contact,這可能是也可能不是零。它包含3列,emailphonefax

我嘲笑了幾個用假接觸商店,我想測試XML響應<shop_contact>至少包含這些標籤的(這樣吧,<email><phone><fax>)並且它不是空的。

我想:

hash = Hash.from_xml(response.body) 
hash["shops"]["shop"].each do |shop| 
    expect(shop["shop_contact"]["email"] || 
     shop["shop_contact"]["phone"] || 
     shop["shop_contact"]["fax"]).to_not be_empty 
end 

,但我得到這個錯誤:

You have a nil object when you didn't expect it! You might have expected an instance of Array. The error occurred while evaluating nil.empty? (NoMethodError)

任何想法?

回答

1

.to_not be_empty測試數組(或類似的)是否包含元素。所以,你可以這樣做:

# construct an array 
data = [ 
    shop['shop_contact']['email'], 
    shop['shop_contact']['phone'], 
    shop['shop_contact']['fax'] 
].compact # compact removes `nil` elements 

expect(data).to_not be_empty 

或者,如果你想堅持與|| S:

expect(shop['shop_contact']['email'] || 
     shop['shop_contact']['phone'] || 
     shop['shop_contact']['fax']).to be_truthy 
相關問題