ruby-on-rails - 如何使用 rspec 为序列化程序编写单元测试
问题描述
嗨,我正在使用 ruby-2.5.0 和 rails 5 开发一个 RoR 项目。我有两个模型 Receipt 和 Receipt Items。收据有_许多收据_项目。收据序列化器:-
# frozen_string_literal: true
class ReceiptSerializer
include JSONAPI::Serializer
TYPE = 'reciept'
attribute :name
attribute :receipt_date
attribute :address
attribute :total_paid
attribute :user_id
attribute :receipt_date do
object.receipt_date.strftime('%d/%m/%Y %H:%M:%S')
end
attribute :receipt_items do
object.receipt_items.map do |receipt_item|
::ReceiptItemSerializer.new(receipt_item).attributes
end
end
end
收据序列化程序:-
# frozen_string_literal: true
class ReceiptItemSerializer
include JSONAPI::Serializer
TYPE = 'reciept_item'
attribute :item_name
attribute :quantity
attribute :price
end
我已经为这两个序列化程序编写了单元测试,如下所示:-receipt_serializer_spec.rb
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ReceiptSerializer do
let(:id) { 1 }
let(:user_id) { 1 }
let(:name) { 'IGA' }
let(:address) { 'address' }
let(:total_paid) { '100' }
let(:receipt_date) { '12/04/2018 15:36:00' }
let(:receipt) do
Receipt.new(
user_id: user_id,
name: name,
address: address,
total_paid: total_paid,
receipt_date: receipt_date
)
end
subject { JSONAPI::Serializer.serialize(receipt) }
it { is_expected.to have_jsonapi_attributes('user-id' => user_id) }
it { is_expected.to have_jsonapi_attributes('address' => address) }
it { is_expected.to have_jsonapi_attributes('total-paid' => total_paid) }
it { is_expected.to have_jsonapi_attributes('receipt-date' => receipt_date) }
it { is_expected.to have_jsonapi_attributes('receipt-date' => receipt_date) }
end
收据_item_serializer_spec.rb
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe ReceiptSerializer do
let(:receipt_id) { 1 }
let(:item_name) { 'ABC' }
let(:quantity) { 1 }
let(:price) { '100' }
let(:receipt_item) do
ReceiptItem.new(
receipt_id: receipt_id,
item_name: item_name,
quantity: quantity,
price: price
)
end
subject { JSONAPI::Serializer.serialize(receipt_item) }
it { is_expected.to have_jsonapi_attributes('item-name' => item_name) }
it { is_expected.to have_jsonapi_attributes('quantity' => quantity) }
it { is_expected.to have_jsonapi_attributes('price' => price) }
end
现在我不知道如何为在receipt_serializer.rb 中定义的receipt_items 属性编写单元测试。请帮我。提前致谢。
解决方案
你可以写
it "serializes the receipt" do
expect(subject).to include('item-name' => 'ABC', 'item-price' => '100') # ... etc
end
如果您已经单独测试所有属性的存在,不确定测试它是否有巨大的价值。
推荐阅读
- laravel - CSRF 令牌不匹配从单独的 vue 项目到 laravel 控制器
- scala - Magnolia:在嵌套类型类的情况下类型派生失败
- c# - C#中的SQL多值参数
- javascript - 如何找到多个字符的lastIndexOf?
- python - 安装 pygraph viz 时出错 - 即使我安装了 graphviz 和其他东西
- node.js - Webpack 多个条目,但只想将一个文件附加到 index.html
- python - 为什么我的烧瓶应用程序没有连接到正确的房间
- javascript - 如何在具有可点击下拉菜单的反应中制作带有标签的文本区域
- javascript - 如何在 gtm 自定义模板中读取特定的 dataLayer obj
- python - 字符串索引超出范围,解决方案工作正常