gpt4 book ai didi

ruby-on-rails - 确保 JSON 响应仅包含带有 rspec 的 X 键

转载 作者:行者123 更新时间:2023-12-01 23:56:06 24 4
gpt4 key购买 nike

我有以下 rspec 请求测试:

describe "Order Processing Statuses API" do
# index
let(:user_with_api) { FactoryGirl.create(:user_with_api) }
it 'sends a list of order statuses' do
FactoryGirl.create_list(:order_processing_status, 2)

get '/api/v1/order_statuses', nil, 'HTTP_AUTHORIZATION'=>"Token token=\"#{user_with_api.api_keys.first.access_token}\""

expect(response).to be_success
expect(json.length).to eq(2)
end
end

json 由这个助手定义:

module Requests
module JsonHelpers
def json
@json ||= JSON.parse(response.body)
end
end
end

如何确保 JSON 数组中的每个对象都具有我的 API 想要公开的键?所以,在我的 Controller 中我会有这样的东西:

render @json, only: [:id, :name]

我如何确保响应的每个对象都只具有这些属性?考虑到在使用工厂定义对象时,添加的属性比公开的属性更多。

最佳答案

你想要的匹配器是:

expect(json.keys).to contain_exactly(:id, :name)

还有一个 array match syntax :

因此,如果您有一个类似于以下内容的 JSON 响应:

[ "order_statuses" : 
[
{
"id" : "id_one",
"name: "a name"
},
{
"id" : "id_one",
"name: "a name"
}
]
]

那么您的(伪)代码可能类似于:

json[ "order_statuses" ].each do |status|
expect(status.keys).to contain_exactly( :id, :name )
end

关于ruby-on-rails - 确保 JSON 响应仅包含带有 rspec 的 X 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23619524/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com