关键转换在 active_model_serializers 的测试环境中不起作用
Key transform not working in test environment for active_model_serializers
我正在使用 json_api
适配器并且没有明确指定密钥转换,因此我的应用程序正在使用 json_api
提供的密钥转换,即 :dashed
我的序列化程序中有一个名为 access_locked?
的变量。
下面是包含管理模型序列化程序的代码片段:
#app/serializers/admin_serializer.rb
class AdminSerializer < ActiveModel::Serializer
attributes :id, :email, :access_locked?
end
在开发环境中,我在 admin json 中正确获取值 access-locked?
,即 underscore_ 被连字符-
替换
但是我的 rspec 测试用例失败了,因为序列化的管理员包含 access_locked?
而不是 access-locked?
尝试在 test.rb
和 active_model_serializers.rb
中使用 ActiveModelSerializers.config.key_transform = :unaltered
但没有成功。
gem 版本为 gem 'active_model_serializers', '0.10.0rc4'
这是失败的 rspec:
#features/dashboard/admins/admins_index_spec.rb
scenario 'admin sees all other admins', :js => true do
signin_admin(@admin.email, @admin.password)
expect(page).to have_content I18n.t 'devise.sessions.signed_in'
click_link 'Settings'
click_link 'Admins'
expect(page).to have_content @admin.email
expect(page).to have_content @admin1.email
expect(page).to have_content @admin2.email
expect(page).to have_selector('#admin-row-1 .glyphicon-ban-circle')
#TODO failing because of
expect(page).to have_selector('#admin-row-2 .glyphicon-ok-circle')
expect(page).to have_selector('#admin-row-3 .glyphicon-ban-circle')
expect(page).to have_selector('#admin-row-1 .glyphicon-edit')
expect(page).to have_selector('#admin-row-3 .glyphicon-trash')
find('#admin-row-3 .glyphicon-edit').click
expect(page).to have_selector('#admin-row-3 .glyphicon-check')
expect(page).to have_selector('#admin-row-3 .glyphicon-remove')
find('#admin-row-3 .glyphicon-check').click
expect(page).to have_selector('#admin-row-3 .glyphicon-trash')
find('#admin-row-1 .glyphicon-ban-circle').click
expect(page).to have_css('.modal', text: 'Lock Admin?')
find('.btn-primary.confirm').click
expect(page).to have_content "Can't lock yourself."
find('#admin-row-2 .glyphicon-ok-circle').click
expect(page).to have_css('.modal', text: 'Unlock Admin?')
find('.btn-primary.confirm').click
expect(page).to have_selector('#admin-row-2 .glyphicon-ban-circle')
end
将 gem 指向 master 并解决了这个问题:
gem 'active_model_serializers', github: 'rails-api/active_model_serializers', branch: :master
此时可能已解决,但以防万一......我想你想使用 ActiveModelSerializers.config.key_transform = :dash
而不是 :unaltered
我正在使用 json_api
适配器并且没有明确指定密钥转换,因此我的应用程序正在使用 json_api
提供的密钥转换,即 :dashed
我的序列化程序中有一个名为 access_locked?
的变量。
下面是包含管理模型序列化程序的代码片段:
#app/serializers/admin_serializer.rb
class AdminSerializer < ActiveModel::Serializer
attributes :id, :email, :access_locked?
end
在开发环境中,我在 admin json 中正确获取值 access-locked?
,即 underscore_ 被连字符-
但是我的 rspec 测试用例失败了,因为序列化的管理员包含 access_locked?
而不是 access-locked?
尝试在 test.rb
和 active_model_serializers.rb
中使用 ActiveModelSerializers.config.key_transform = :unaltered
但没有成功。
gem 版本为 gem 'active_model_serializers', '0.10.0rc4'
这是失败的 rspec:
#features/dashboard/admins/admins_index_spec.rb
scenario 'admin sees all other admins', :js => true do
signin_admin(@admin.email, @admin.password)
expect(page).to have_content I18n.t 'devise.sessions.signed_in'
click_link 'Settings'
click_link 'Admins'
expect(page).to have_content @admin.email
expect(page).to have_content @admin1.email
expect(page).to have_content @admin2.email
expect(page).to have_selector('#admin-row-1 .glyphicon-ban-circle')
#TODO failing because of
expect(page).to have_selector('#admin-row-2 .glyphicon-ok-circle')
expect(page).to have_selector('#admin-row-3 .glyphicon-ban-circle')
expect(page).to have_selector('#admin-row-1 .glyphicon-edit')
expect(page).to have_selector('#admin-row-3 .glyphicon-trash')
find('#admin-row-3 .glyphicon-edit').click
expect(page).to have_selector('#admin-row-3 .glyphicon-check')
expect(page).to have_selector('#admin-row-3 .glyphicon-remove')
find('#admin-row-3 .glyphicon-check').click
expect(page).to have_selector('#admin-row-3 .glyphicon-trash')
find('#admin-row-1 .glyphicon-ban-circle').click
expect(page).to have_css('.modal', text: 'Lock Admin?')
find('.btn-primary.confirm').click
expect(page).to have_content "Can't lock yourself."
find('#admin-row-2 .glyphicon-ok-circle').click
expect(page).to have_css('.modal', text: 'Unlock Admin?')
find('.btn-primary.confirm').click
expect(page).to have_selector('#admin-row-2 .glyphicon-ban-circle')
end
将 gem 指向 master 并解决了这个问题:
gem 'active_model_serializers', github: 'rails-api/active_model_serializers', branch: :master
此时可能已解决,但以防万一......我想你想使用 ActiveModelSerializers.config.key_transform = :dash
而不是 :unaltered