RSpec を使用して並列トランザクションをテストする方法はありますか? 銀行口座の残高が減少または増加する前に、トランザクション内でロックする必要があると言っています。しかし、現在、RSpec オプションをオフにしているにもかかわらtransactional_fixtures
ず、2 つの別々のスレッドで 2 つの並列トランザクションを起動することはできません。なぜか両方ともぶら下がっています。指定されたアカウントがモデルである場合、この仕様はハングします:
it "should ensure operations are performed correctly" do
@account = Account.create(:balance => 0)
threads = []
(0..1).each do |index|
threads << Thread.new do
Account.transaction do
account = Account.find(@account.id, :lock => true)
account.balance += 100
sleep 0.5
account.save!
end
end
end
threads.each{|t|t.join}
@account.reload.balance.should == 200
end
トランザクションの能力を発揮しながらハングしないようにする方法はありますか?