【问题标题】:Rspec - Compare two json valuesRspec - 比较两个 json 值
【发布时间】:2020-07-22 16:59:55
【问题描述】:

收到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-rails json ruby ruby-on-rails-3 rspec


    【解决方案1】:

    我猜您正在尝试使用 JSON 格式测试 API 响应。您可以尝试 json_spec gem 以及许多其他有用的功能 https://github.com/collectiveidea/json_spec

    【讨论】:

      【解决方案2】:

      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

      【讨论】:

      • 谢谢,这行得通!如果你有机会,你能看看我关于 RSpec 的另一个问题吗?我很感激!这是link.
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2012-12-26
      • 2014-03-02
      • 1970-01-01
      相关资源
      最近更新 更多