-1

レールアプリケーションをRails 4.1.9から4.2.2にアップグレードしていました。レール4.1.9ではrspecがグリーンでした。テスト、私はいくつかのrspecの失敗を得た。レールの後4.1.9から4.2.2にレールをアップグレードした後のシリアライザからの応答

Rails version = 4.2.2 
Ruby version = 2.2.4 
rspec = 3.0.0 

Following are the gems I used for testing, 
gem 'rspec-rails' 
    gem 'rspec_junit_formatter', require: false, git: '[email protected]:sj26/rspec_junit_formatter.git' 
    gem 'awesome_print' 
    gem 'factory_girl' 
    gem 'jasmine' 
    gem 'jasmine-jquery-rails' 
    gem 'quiet_assets' 
    gem 'sequel' 
    gem 'brakeman', require: false 
    gem 'qunit-rails' 
gem 'webmock', '~> 2.3.1' 
    gem 'capybara' 
    gem 'simplecov', require: false 
    gem 'simplecov-rcov', require: false 
    gem 'cucumber-rails', require: false 
    gem 'rack_session_access' 
    gem 'poltergeist' 
    gem "faker" 
    gem 'shoulda-matchers' 
    gem "shoulda-callback-matchers" 

私は4.1.9から4.2.2へのレールのバージョンで

Failure/Error: response_json = JSON.parse(response.body)['credit_value_rating_types'] 
    TypeError: 
     no implicit conversion of String into Integer 

、のような失敗を取得しています4.2.2にアップグレードし、私は「キーをしないのです[ 'credit_value_rating_types' ] "を返します。実際には、Activemodelシリアライザを使用してレスポンスをシリアル化しています。

私は失敗の背後にある理由を見つけることができませんでした。洞察力は役立ちます。

答えて

1

JSON.parse(response.body)はハッシュではなく配列を返します。

したがって、配列には整数としてインデックスが使用されるため、エラーが発生します。

JSON.parse(response.body)で何を確認してください。

+0

JSON.parse(response.body)はハッシュの配列を提供しています。 –

+1

@CharlesSkariahだから、 [0] ['credit_value_rating_types'] 'アイテムが1つしかない場合 –

+0

@CharlesSkariah多分、あなたは 'JSON.parse(response.body) 'をしたいと思っています。[{" "id" => 1、 "name" => "サンプルタイプ"}] –

0

私は最後に解決策を見つけることができました。この問題は、アクティブモデルのシリアライザgemによって作成されました。私がレールをアップグレードしたときに、送信している応答に潜在的な問題がいくつかありました。

シリアライザが応答しない場合もあります。

ソリューションは、安定した枝それとスペック失敗解決

gem 'active_model_serializers', github: 'rails-api/active_model_serializers', branch: '0-8-stable' 

bundle install 

に明示的にAMSの宝石を追加し、言及することです。 詳細については、次のリンクを参照してください。 Github Issue

関連する問題