gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 09:01:47 25 4
gpt4 key购买 nike

鉴于以下 ActiveModel::Serializer类(class):

class SampleSerializer < ActiveModel::Serializer
attributes :id, :name
end

如何使用 RSpec 进行测试?

最佳答案

假设

此答案假设您拥有 rspec-rails , active_model_serializersfactory_girl_rails gems 安装和配置。

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

串行器规范

对于 active_model_serializers 的当前版本(0.10.0.rc3)在撰写本文时,ActiveModel::Serializer类(class)收不到 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 = ActiveModelSerializers::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 响应时,必须考虑适配器配置:
  • 默认配置,: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'] }
  • 关于ruby-on-rails - 使用 Rspec 测试 ActiveModel::Serializer 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35375757/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com