rspec未将数据库保存为计算值

时间:2015-07-30 15:20:57

标签: ruby-on-rails-4 testing rspec factory-bot

我在编写一个测试时遇到了麻烦。我有一个预算模型,其中承诺(列)是在回调calculate_budget之后从名为after_create的方法计算的。

在正常开发模式下,应用程序正在保存到数据库,但在当前测试中,我会使用其他预算记录,其中承诺为0而不是计算出的承诺。

这里有一些代码

before(:each) do
  @member1 = FactoryGirl.create(:member)
  @member2 = FactoryGirl.create(:member, id: "2")
  income = FactoryGirl.create(:income, member: @member1)
  donation1 = FactoryGirl.create(:donation1)
  donation2 = FactoryGirl.create(:donation2)
  @budget = FactoryGirl.create(:budget, donation: donation1, member: @member1)
end

...
..

it "description" do
  receipt1 = Receipt.create!(id: 1, date: '2015-01-01', member: @member1)
  receipt2 = Receipt.create!(id: 2, date: '2015-02-01', member: @member1)
  receipt1.items << ReceiptItem.create!(id: 1, donation_id: 1, amount: 10, receipt_id: 1)
  receipt2.items << ReceiptItem.create!(id: 2, donation_id: 1, amount: 20, receipt_id: 2)

  budget2 = FactoryGirl.create(:budget, title: 'budget2', start_date: '2016-01-01', end_date: '2016-12-31', donation_id: 1, member: @member1)

  ap "#budget promise => #{@budget.title} promise #{@budget.promise} remaining #{@budget.remainingPromiseCurrentBudget}"
  ap "#budget promise => #{budget2.title} promise #{budget2.promise} remaining #{budget2.remainingPromiseCurrentBudget}"

  @budget.save
  budget2.save

  ap Budget.all
  # debugger
  ap "budget2.get_all_old_budgets: #{budget2.get_all_old_budgets}"

  expect(budget2.remainingPromiseCurrentBudget).to be(210)
end

知道为什么没有正确保存记录?

更新

记录保存到测试数据库中,但只是保证计算值未更新/保存到测试数据库中。如上所述,dev db正确地将值保存到db。

1 个答案:

答案 0 :(得分:0)

问题出在before(:each)块中。

我现在添加了it'...', skip_before: true do并在测试中直接复制了我的初始设置,而不是我使用create方法的工厂女孩​​的build方法,并在之后保存了它。

之后,回调已被触发,并且承诺已保存到数据库。

获得的经验教训:

在每个块之前使用build mehtods并使用.save手动保存,而不是使用创建块。