Rspec - 比较两个 json 值
Rspec - Compare two json values
我收到了render json: { success: 'Success' }
的回复,我在想测试回复是否收到这样的内容时遇到了问题。我的单元测试是:
let(:success) do
{
success: "Success"
}
end
it 'responds with json containing the success message' do
expect(JSON.parse(response.body)).to eq(success)
end
我的测试失败了,即:
expected: {:success=>"Success"}
got: {"success"=>"Success"}
我试着给success:'Success'
加上双引号,这样它就变成了'success':'Success'
,但还是有同样的问题。我有两个问题,第一个是为什么成功前面有一个冒号,第二个是我怎么去掉它?
JSON.parse
默认会有字符串-y 键。
my_hash = JSON.parse(response.body)
p my_hash.keys.first.class # String
如果你想让它符号化按键,
my_hash = JSON.parse(response.body, symbolize_names: true)
p my_hash.keys.first.class # Symbol
注意:该选项称为 symbolize_names
而不是 symbolize_keys
。
记住符号不是字符串:
p :success == 'success' # false
我猜您正在尝试使用 JSON 格式测试 API 响应。您可以尝试 json_spec
gem 以及许多其他有用的功能 https://github.com/collectiveidea/json_spec
我收到了render json: { success: 'Success' }
的回复,我在想测试回复是否收到这样的内容时遇到了问题。我的单元测试是:
let(:success) do
{
success: "Success"
}
end
it 'responds with json containing the success message' do
expect(JSON.parse(response.body)).to eq(success)
end
我的测试失败了,即:
expected: {:success=>"Success"}
got: {"success"=>"Success"}
我试着给success:'Success'
加上双引号,这样它就变成了'success':'Success'
,但还是有同样的问题。我有两个问题,第一个是为什么成功前面有一个冒号,第二个是我怎么去掉它?
JSON.parse
默认会有字符串-y 键。
my_hash = JSON.parse(response.body)
p my_hash.keys.first.class # String
如果你想让它符号化按键,
my_hash = JSON.parse(response.body, symbolize_names: true)
p my_hash.keys.first.class # Symbol
注意:该选项称为 symbolize_names
而不是 symbolize_keys
。
记住符号不是字符串:
p :success == 'success' # false
我猜您正在尝试使用 JSON 格式测试 API 响应。您可以尝试 json_spec
gem 以及许多其他有用的功能 https://github.com/collectiveidea/json_spec