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

Can I test model instance attributes in a controller spec?

我有一个控制器规格:

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

不要在意那个测试的丑陋。 :)

本次测试returns出错:

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

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

重新加载您的 user 实例:

expect(user.reload.balance).to eq(990)