2016-04-05 9 views
-1

私は単純なAPIを構築していますが、その1つの機能はユーザーにそのバージョンを知らせる必要があるということです。それから私は、バージョン法rspec-railsを使ってハッシュをテストできませんでした

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

とのAPIコントローラを持っているし、私ものconfig/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は受け入れる前に10分ほどの遅れを掛けるからです。 –

+1

私は助けることができてうれしいです。 – Rashmirathi

関連する問題