Rspec и FactoryGirl с несколькими моделями - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в тестах на рельсах, и у меня есть некоторые сомнения ... Мне нужно протестировать несколько моделей, я знаю, как проверить основы, такие как проверки и ассоциации, но я не уверен, как подойтичто мне нужно сделать.

У меня есть две модели, PaymentDocument, PaymentAmount (PaymentDocument has_many PaymentAmount), у каждой модели есть поле с именем «сумма», сумма в модели PaymentDocument имеет сумму каждого PaymentAmount, связанного сЭто.поэтому мне нужно применить некоторые математические операции к каждой сумме PaymentAmount и суммировать их, затем выполнить ту же математическую операцию с суммой PaymentDocument и сравнить ее, чтобы проверить, точно ли они равны или я потерял несколько десятичных знаков.

Прямо сейчасу меня есть два файла спецификаций, один для PaymentDocument и другой для PaymentAmount, как я могу протестировать обе модели одновременно (чтобы убедиться, что информация о каждой модели верна) и затем применить математическую операцию, о которой я упоминал ранее?

payment_document_spec

require "rails_helper"

RSpec.describe PaymentDocument, type: :model do

  describe "validations" do
    it { is_expected.to validate_presence_of(:amount) }
    it { is_expected.to validate_numerality_of(:amount).is_greater_than(0) }
  end
  describe "associations" do
   it { is_expected.to belong_to(:payment_amounts) }
  end
end

payment_amount_spec

require "rails_helper"

RSpec.describe PaymentAmount, type: :model do

  describe "validations" do
    it { is_expected.to validate_presence_of(:payment_document) }
    it { is_expected.to validate_presence_of(:amount) }
    it { is_expected.to validate_numerality_of(:amount).is_greater_than(0) }
  end

  describe "associations" do
    it { is_expected.to have_many(:payment_document) }
  end

end

edit:

Пример

   PaymentDocument
   {
    id => 1,
    amount => 3540095,94
   }
   PaymentAmounts: 
     {
      id => 1,
      pd_id => 1,
      amount => 40095.00,
    }
    {
      id => 2,
      pd_id => 1,
      amount => 500000.94,
    }
    {
      id => 2,
      pd_id => 1,
      amount => 3000000.00,
    }

#The math operation is remove divide the amounts by 1000 and round them by 2

{
  id => 1,
  pd_id => 1,
  amount => 40.10,
}
{
  id => 2,
  pd_id => 1,
  amount => 500.00,
}
{
  id => 2,
  pd_id => 1,
  amount => 3000.00,
}

#The sum of all the payment amounts is 3540.10 and if i do the same operation to the amount of the payment document the result is 3540.1 but in some cases it may not be equal so that's why i want to test this. 

1 Ответ

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

Предполагаю, что при создании payment_amount соответствующая сумма payment_document автоматически обновляется.если это так, вы можете проверить это с помощью чего-то подобного.

describe '#payment' do
    it 'should very amount' do
      pd = Factory.create(:payment_document)
      attributes = [ { pd_id: pd.id, amount: 40095.00 },
                     { pd_id: pd.id, amount: 500000.94 },
                     { pd_id: pd.id, amount: 3000000.00 }
                   ]
      attributes.each do |attrs|
        Factory.create(:payment_amount, attrs)
      end

     total_amount = attributes.map{ |m| m[:amount]}.sum
     expect(pd.reload.amount).to eq(total_amount)
    end
  end

ПРИМЕЧАНИЕ: это предположение, поскольку я не знаю о вашем коде модели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...