我在编写一个测试时遇到了麻烦。我有一个预算模型,其中承诺(列)是在回调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。
答案 0 :(得分:0)
问题出在before(:each)
块中。
我现在添加了it'...', skip_before: true do
并在测试中直接复制了我的初始设置,而不是我使用create
方法的工厂女孩的build
方法,并在之后保存了它。
之后,回调已被触发,并且承诺已保存到数据库。
在每个块之前使用build mehtods并使用.save
手动保存,而不是使用创建块。