期待xml响应中的多个元素中的至少一个

时间:2015-08-21 10:12:34

标签: ruby-on-rails xml rspec cucumber

我有一个API端点,它返回一个XML响应。我要测试的是该响应的一部分。

我有一个shop模型,它引用另一个名为shop_contact的表,可能是也可能不是。它包含3列,emailphonefax

我嘲笑几家有虚假联系人的商店,我想测试一下XML响应<shop_contact>是否至少包含这些标签(是<email>,{{1} }}或<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

有什么想法吗?

1 个答案:

答案 0 :(得分: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