我有兩個ActiveRecord的模型,看起來像這樣:古怪的行爲用ActiveRecord和測試
class Foo < ActiveRecord::Base
after_commit { puts 'after commit in Foo' }
end
class Bar < ActiveRecord::Base
after_commit { puts 'after commit in Bar' }
end
然後,我有一個看起來像這樣兩個測試:
測試/單位/ foo_test.rb
class FooTest < ActiveSupport::TestCase
setup do
puts 'Creating Foo'
@foo = Foo.create
end
should 'foo exists' do
assert [email protected]?
end
end
測試/單元/ bar_test.rb:
class BarTest < ActiveSupport::TestCase
self.use_transactional_fixtures = false
setup do
pits 'Creating Bar'
@bar = Bar.create
end
should 'bar exists' do
assert [email protected]?
end
end
但是當我運行這些測試在一起我得到以下輸出:
Creating Foo
Creating Bar
after commit in Foo
after commit in Bar
我是在默認情況下Rails的包裹活動記錄的東西在一個事務中,然後在每次測試結束時做了回滾印象。我已經嘗試明確地設置use_transactional_fixtures = true,但沒有取得任何結果。
我的問題是這裏發生了什麼?看起來活動記錄正在爲Bar創建回調鏈,然後在測試完成後它不會被清除。我也試過使用DatabaseCleaner,並在測試結束時在拆卸回調中顯式銷燬@bar,但沒有任何工作。
編輯:看起來像它可以在導軌的一個問題:https://github.com/rails/rails/pull/3300