Как написать модульный тест для сериализатора с помощью rspec - PullRequest
0 голосов
/ 06 мая 2018

Привет, я работаю над проектом RoR с ruby-2.5.0 и rails 5. У меня есть две модели 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

receipt_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

Теперь я не знаю, как написать модульный тест для атрибута receive_items, который я определил в receive_serializer.rb. Пожалуйста, помогите мне. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Надеюсь, этот камень вам пригодится https://github.com/collectiveidea/json_spec

0 голосов
/ 06 мая 2018

Вы могли бы написать

it "serializes the receipt" do
  expect(subject).to include('item-name' => 'ABC', 'item-price' => '100') # ... etc
end

Не уверен, что есть огромное значение для проверки этого, если вы индивидуально проверяете наличие всех своих атрибутов уже.

...