2015-08-21 83 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 
相关问题