【问题标题】:Expect at least one of multiple elements in a xml response期望 xml 响应中的多个元素中的至少一个
【发布时间】:2015-08-21 10:12:33
【问题描述】:

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

我有一个shop 模型,它引用另一个名为shop_contact 的表,它可能为nil,也可能不是nil。它包含 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)

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails xml rspec cucumber


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 2015-11-21
      • 1970-01-01
      • 2010-09-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 2015-05-17
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多