2016-04-05 4 views
-1

Я строю простой API, и одна из особенностей заключается в том, что он должен информировать пользователей о своей версии. Тогда у меня есть контроллер Api с помощью метода версииНеудачное тестирование хеша с rspec-rails

class ApiController < ApplicationController 
    def version 
    render :json => {version: '0.0.1'} 
    end 
end 

и у меня также есть маршрут в моей конфигурации/routes.rb

Rails.application.routes.draw do 
    root 'site#index' 
    get 'api/version' 
end 

Я использую RSpec и это мой недостаток тест

it 'returns the correct version number (0.0.1 by now)' do 
    get :version 
    expect(response.body).to eq({'version':'0.0.1'}) 
end 

случается, что мой тест не пройден (http://imgur.com/7MPL8RO)

1) ApiController GET #version returns the correct version number (0.0.1 by now) 
Failure/Error: expect(response.body).to eq(a) 

    expected: {:version=>"0.0.1"} 
     got: "{\"version\":\"0.0.1\"}" 

Что здесь? Должен ли я тестировать response.body.to_s или что-то в этом роде?

Кажется, я пропустил какой-то момент, возможно, легкий.

ответ

2

response.body возвращает сериализованную строку json, тогда как {'version':'0.0.1'} является Hash.

Ваше ожидание должно быть expect(response.body).to eq({'version':'0.0.1'}.to_json)

или

expect(JSON.parse(response.body)).to eq({'version':'0.0.1'})

+0

Большое спасибо, мой друг. Я выбрал первую возможность, и она отлично поработала. Я приму ваш ответ как можно скорее, потому что SO накладывает задержку на десять минут или около того, прежде чем принимать. –

+1

Я рад, что смогу помочь. – Rashmirathi

Смежные вопросы