Изменение ответа от сериализаторов после обновления рельсов до 4.2.2 с 4.1.9
Я обновлял свое приложение 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"
После обновления рельсы до 4.2.2 я получаю сбой, как,
Failure/Error: response_json = JSON.parse(response.body)['credit_value_rating_types']
TypeError:
no implicit conversion of String into Integer
В версии rails с 4.1.9 по 4.2.2 мне не хватает ключа "['credit_value_rating_types']" в теле ответа. Я на самом деле сериализирую ответ, используя сериализаторы Activemodel.
Я не смог найти причину неудачи. Любое понимание будет полезным.
2 ответа
Похоже на то JSON.parse(response.body)
возвращает массив, а не хеш.
И поэтому вы получите ошибку, потому что массивы ожидают целые числа в качестве индексов.
Проверьте, что вы получаете в JSON.parse(response.body)
,
После целого дня исследований я, наконец, смог найти решение. Проблема была создана с помощью activemodel serializer gem. Как только я обновил рельсы, возникли некоторые потенциальные проблемы с ответом, который они посылают.
По некоторым ответам сериализаторы там даже не работают.
Решение состоит в том, чтобы явно добавить гем AMS и упомянуть стабильную ветвь
gem 'active_model_serializers', github: 'rails-api/active_model_serializers', branch: '0-8-stable'
bundle install
Решил провал спецификации с этим. Вы можете найти более подробную информацию по следующей ссылке Github Issue