我有一种Rails 4.2.0
使用悲观锁定来更改计数器的方法
class Foo < < ActiveRecord::Base
def bump!
transaction do
lock!
parent.lock!
lock.counter += 1
parent.counter += 1
save!
parent.save!
end
end
end
我用Rspec 3.1
这样的方式测试它
expect{foo.bump!}.to change(foo, :counter).by(1)
expect{foo.bump!}.to change(foo.parent, :counter).by(1)
第一个change(foo, :counter)
测试通过,但第二个change(foo.parent, :counter)
失败,除非我同时注释掉lock!
和parent.lock!
如果我像这样重写失败的测试,它会通过
prev_counter = foo.parent.counter
foo.bump!
expect(foo.parent.counter).to eq prev_counter + 1
为什么它不起作用expect{...}.to change
?