Ruby on rails json响应顺序的rspec测试

Ruby on rails json响应顺序的rspec测试,ruby-on-rails,ruby,ruby-on-rails-3,ruby-on-rails-3.1,rspec,Ruby On Rails,Ruby,Ruby On Rails 3,Ruby On Rails 3.1,Rspec,因此,我的代码返回的json如下: "offenses": [ { "name": "Speeding", "penalties": [ { "name": "Ticket", "severity": "Medium" } } ] 我有一个胖女孩: FactoryGirl.define do factory :person_offense_penalty do person_offense name 'Tic

因此,我的代码返回的json如下:

    "offenses": [
    {
    "name": "Speeding",
    "penalties": [
    {
    "name": "Ticket",
    "severity": "Medium"
    }

}
]
我有一个胖女孩:

FactoryGirl.define do
  factory :person_offense_penalty do
    person_offense
    name 'Ticket'
    severity 'Medium'
  end
end



FactoryGirl.define do
  factory :person_offense do
    name 'Speeding'
    person
  end
end
这里是我对响应的测试,效果很好

  person_offenses = person.person_offenses
  expect(response_body['offenses'].size).to eq(person_offenses.size)



   person_offenses.each_with_index do |offense, offense_index|
        expect(response_body['offenses'][offense_index]['name']).to eq(offense.name)
        offense.person_offense_penaltys.each_with_index do |penalty, penalty_index|
          expect(response_body['offenses'][offense_index]['penaltys'][penalty_index]['name']).to eq(penalty.name)
          expect(response_body['offenses'][offense_index]['penaltys'][penalty_index]['severity']).to eq(penalty.severity)
        end
      end
我需要写另一个测试,以确保攻击名称按升序排序。
有人能帮我吗首先,让我们把你的JSON转换成一个有效的字符串:

[1] pry(main)> x = "{\"offenses\": [{ \"name\": \"Speeding\", \"penalties\": [ { \"name\": \"Ticket\", \"severity\": \"Medium\" } ] }] }"
现在我们可以解析它了

您可以通过以下方式获得一份进攻名单:

现在,您可以简单地选择名称并进行比较

expect(names).to eq(names.sort)
如果原始JSON按其
“name”
属性对每个
“offence”
进行排序,则此操作将通过

[3] pry(main)> names = offenses.map { |o| o["name"] }
=> ["Speeding"]
expect(names).to eq(names.sort)