加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 使用Rspec测试ActiveModel :: Serializer类

发布时间:2020-12-16 20:11:33 所属栏目:百科 来源:网络整理
导读:给定以下ActiveModel :: Serializer类: class SampleSerializer ActiveModel::Serializer attributes :id,:nameend 如何用RSpec进行测试? 解决方法 假设 这个答案假定您已经安装并配置了rspec-rails,active_model_serializers和factory_girl_rails gem. 此
给定以下ActiveModel :: Serializer类:
class SampleSerializer < ActiveModel::Serializer
      attributes :id,:name
end

如何用RSpec进行测试?

解决方法

假设

这个答案假定您已经安装并配置了rspec-rails,active_model_serializers和factory_girl_rails gem.

此答案还假设您已为Sample资源定义了一个工厂.

串行器规格

对于写入时active_model_serializers的当前版本(0.10.0.rc3),ActiveModel :: Serializer类不会收到to_json,而是包装在适配器类中.要获得包装在序列化器实例中的模型的序列化,必须创建适配器的实例:

before(:each) do
  # Create an instance of the model
  @sample = FactoryGirl.build(:sample)

  # Create a serializer instance
  @serializer = SampleSerializer.new(@sample)

  # Create a serialization based on the configured adapter
  @serialization = ActiveModel::Serializer::Adapter.create(@serializer)
end

适配器实例接收to_json方法并返回模型的序列化.

subject { JSON.parse(@serialization.to_json) }

然后可以在返回的JSON上运行期望.

it 'should have a name that matches' do
  expect(subject['name'])
    .to eql(@sample.name)
end

解析JSON响应时,必须考虑适配器配置:

>默认的config,:attributes可以生成没有根密钥的JSON响应:

subject { JSON.parse(@serialization.to_json) }

>:json config根据模型的名称生成带有根键的JSON响应:

subject { JSON.parse(@serialization.to_json)['sample'] }

>:json_api config生成符合jsonapi标准的JSON:

subject { JSON.parse(@serialization.to_json)['data']['attributes'] }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读