-1

我正在将我的 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 序列化器对响应进行序列化。

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

4

2 回答 2

1

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

所以你会得到错误,因为数组需要整数作为索引。

检查你得到了什么JSON.parse(response.body)

于 2017-09-13T09:25:04.713 回答
0

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

对于某些响应,序列化程序甚至无法正常工作。

解决方案是显式添加 AMS gem 并提及 stable 分支

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

bundle install

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

于 2017-09-14T12:33:34.193 回答