在债务管理应用程序中,我测试行为,当用户借钱(创建expense_debt
)然后返回(创建income_debt
),应用更新expense_debt.returned
到true
我的debt_rspec.rb
:
require 'rspec'
describe Debt do
user = FactoryGirl.create(:user)
let(:expense_debt) { FactoryGirl.build(:expense_debt, user: user) }
let(:income_debt) { FactoryGirl.build(:income_debt, user: user) }
subject { income_debt }
it 'update expense_debt.returned' do
expense_debt.save
income_debt.save
expect(expense_debt.returned).to be_true
end
end
此测试失败,但在开发过程中一切正常。
然后我发现expense_debt
和Debt.first
的值returned
不同。如果我重写测试:
it 'update expense_debt.returned' do
expense_debt.save
income_debt.save
expect(Debt.first.returned).to be_true
end
它过去了。
我无法理解,为什么他们不一样。
# This is expense_debt
#<Debt id: 1, ..., returned: false, ...>
# And this is Debt.first
#<Debt id: 1, ..., returned: true, ...>
有人可以解释RSpec的这种行为吗?
答案 0 :(得分:0)
可能正在使用缓存版本。试试这个
expect(expense_debt.reload.debt_returned).to be_true