Rspe c - Сравните два значения json - PullRequest
0 голосов
/ 10 апреля 2020

Я получил ответ от 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' но все равно есть та же проблема. У меня есть два вопроса: первый - почему перед успехом стоит двоеточие, а второй - как его удалить?

Ответы [ 2 ]

2 голосов
/ 10 апреля 2020

JSON.parse будет иметь строковые ключи по умолчанию.

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

0 голосов
/ 02 мая 2020

Полагаю, вы пытаетесь проверить ответ API в формате JSON. Вы можете попробовать json_spec самоцвет со многими другими полезными функциями https://github.com/collectiveidea/json_spec

...