RSpec在保存后显示2个不同的模型实例

时间:2014-03-01 16:44:06

标签: ruby-on-rails rspec ruby-on-rails-4

在债务管理应用程序中,我测试行为,当用户借钱(创建expense_debt)然后返回(创建income_debt),应用更新expense_debt.returnedtrue

我的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_debtDebt.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的这种行为吗?

1 个答案:

答案 0 :(得分:0)

可能正在使用缓存版本。试试这个

  expect(expense_debt.reload.debt_returned).to be_true