diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2019-01-29 13:29:27 +0100 |
---|---|---|
committer | Jean Boussier <jean.boussier@gmail.com> | 2019-01-29 16:10:47 +0100 |
commit | 74dbce0fcad322ae958abc0a1e00e78a519710a1 (patch) | |
tree | 03034feaa2bca5ab5e92812fa3cdc1e213fb899a /activerecord/lib/rails | |
parent | 8309cd2c68f548987b8447475c7735a19714baaa (diff) | |
download | rails-74dbce0fcad322ae958abc0a1e00e78a519710a1.tar.gz rails-74dbce0fcad322ae958abc0a1e00e78a519710a1.tar.bz2 rails-74dbce0fcad322ae958abc0a1e00e78a519710a1.zip |
Eagerly materialize the fixtures transaction
The transaction used to restore fixtures is an implementation detail
that should be abstracted away. Idealy a test should behave the same
wether or not transactional fixtures are enabled.
However since transactions have been made lazy, the fixture
transaction started leaking into tests case. e.g. consider the
following (oversimplified) test:
```ruby
class SQLSubscriber
attr_accessor :sql
def initialize
@sql = []
end
def call(*, event)
sql << event[:sql]
end
end
subscriber = SQLSubscriber.new
ActiveSupport::Notifications.subscribe("sql.active_record", subscriber)
User.connection.execute('SELECT 1', 'Generic name')
assert_equal ['SELECT 1'], subscriber.sql
```
On Rails 6 it starts to break because the `sql` array will be `['BEGIN', 'SELECT 1']`.
Several things are wrong here:
- That transaction is not generated by the tested code, so it shouldn't be visible.
- The transaction is not even closed yet, which again doesn't reflect the reality.
Diffstat (limited to 'activerecord/lib/rails')
0 files changed, 0 insertions, 0 deletions