我可以在控制器规范中测试模型实例属性吗?

时间:2015-04-24 07:37:50

标签: ruby-on-rails rspec

我有一个控制器规范:

let!(:user) { create(:user, balance: 1000) }
let!(:group) { create(:group) }
let!(:parenthood) { create :parenthood, user: user }

before :each do
  sign_in user
end

context 'when user wants to pay for own children' do
  let(:box) { build(:box, user: user, person_amount: 10, group: group) }
  it "decreases user's balance" do
    post :create, box: box.attributes.merge({'box_memberships_attributes'=>{'0'=>{'id'=>'', 'student_id'=>parenthood.student.id, '_destroy'=>'0'}},
                                             'pay_own_children' => 'true'})
    expect(user.balance).to eq(990)
  end
end

不要注意该测试的丑陋。 :)

此测试返回错误:

Failure/Error: expect(user.balance).to eq(990)

       expected: 990
            got: 1000.0 (#<BigDecimal:c973608,'0.1E4',9(27)>)

       (compared using ==)

但是,如果我使用binding.pry在控制器中调试测试方法,一切正常:

def create
  # some code
  binding.pry
  # current_user.balance.to_s return "990"
end

这是否意味着我无法测试控制器规格中的模型状态?

1 个答案:

答案 0 :(得分:2)

重新加载user个实例:

expect(user.reload.balance).to eq(990)
相关问题