Ruby on rails json响应顺序的rspec测试
因此,我的代码返回的json如下: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
"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)