首页 > 解决方案 > 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'但仍然有同样的问题。我有两个问题,第一个是为什么成功前有一个冒号,第二个是如何删除它?

标签: ruby-on-railsjsonrubyruby-on-rails-3rspec

解决方案


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


推荐阅读