【问题标题】:Efficiently check that a JSON response contains a specific element within an array有效检查 JSON 响应是否包含数组中的特定元素
【发布时间】:2023-03-07 11:26:02
【问题描述】:

鉴于 JSON 响应:

{
  "tags": [
    {
      "id": 81499,
      "name": "sign-in"
    },
    {
      "id": 81500,
      "name": "user"
    },
    {
      "id": 81501,
      "name": "authentication"
    }
  ]
}

使用 RSpec 2,我想验证此响应是否包含带有名称身份验证的标签。作为一个相当新的 Ruby,我认为有一种比迭代数组和使用 include 检查名称的每个值更有效的方法?或地图/收集。我可以简单地使用正则表达式来检查 /authentication/i 但这似乎也不是最好的方法。

这是我目前的规格:

it "allows filtering" do
  response = @client.story(15404)

  #response.tags.
end

【问题讨论】:

    标签: ruby json rspec rspec2


    【解决方案1】:

    如果

    t = JSON.parse '{ ... }'
    

    然后这个表达式要么返回nil,它是假的,要么它会返回它检测到的东西,它的布尔评估为真。

    t['tags'].detect { |e| e['name'] == 'authentication' }
    

    如果没有tags 键,这将引发NoMethodError。我认为这在测试中处理得很好,但您可以安排该案例也显示为错误(即 nil):

    t['tags'].to_a.detect { |e| e['name'] == 'authentication' }
    

    【讨论】:

    • 太棒了!正是我正在寻找的方法:) 忘了看 Enumerable 类。
    猜你喜欢
    • 2018-02-13
    • 2017-12-09
    • 2013-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 2016-09-06
    • 1970-01-01
    相关资源
    最近更新 更多