从4.1.9导轨升级到4.2.2后,序列化器的响应更改

时间:2017-09-13 09:21:19

标签: ruby-on-rails json rspec active-model-serializers rails-upgrade

我正在将我的rails应用程序从Rails 4.1.9升级到4.2.2。在rails 4.1.9中,rspec是绿色的。升级后,当我运行测试时,我得到了几个rspec失败。

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: 'git@github.com: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"

在rails升级到4.2.2后,我遇到了失败,

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

对于4.1.9到4.2.2的rails版本,我在响应正文中缺少关键字“['credit_value_rating_types']”。我实际上是使用Activemodel Serializers序列化响应。

我无法找到失败背后的原因。任何见解都会有所帮助。

2 个答案:

答案 0 :(得分:1)

似乎JSON.parse(response.body)返回一个数组而不是哈希值。

所以你得到错误,因为数组期望整数作为索引。

检查<rewriter xmlns="http://marklogic.com/xdmp/rewriter"> <match-path matches="^/(\w+\.xqy)$"> <set-path>/subfolder/$1</set-path> </match-path> <dispatch/> </rewriter> 中的内容。

答案 1 :(得分:0)

经过一天的研究后,我终于找到了解决方案。问题是由activemodel序列化程序gem创建的。一旦我进行了rails升级,他们发送的响应存在一些潜在的问题。

对于某些响应,序列化器甚至不工作。

解决方案是明确添加AMS gem并提及稳定分支

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

bundle install

解决了规范失败的问题。 您可以通过以下链接找到更多详细信息 Github Issue