ruby-on-rails - Rspec - 比较两个 json 值
问题描述
我收到了来自 的回复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
推荐阅读
- php - 解释为什么正则表达式太大 PHP/PCRE
- sql - 根据多对多关系返回记录列表的最快方法
- mysql - 使用 unixodbc 连接数据库时出现 IM004 错误(macos)
- python - 将 linsolve 解决方案映射到 Sympy 中的索引符号
- python - 如何在具有数组值的字典中循环
- angular - 如何在 ion-img 中将图像填充到整个空间而不丢失纵横比?
- python - 如何在python的同一程序中找到球体和圆柱体的面积和体积
- javascript - 传单地图添加栅格
- python - 在python中处理echo命令输出
- javascript - 尝试为变量分配新值时无法读取“状态”