我正在将我的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序列化响应。
我无法找到失败背后的原因。任何见解都会有所帮助。
答案 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