Module: ActiveRecord::TestFixtures
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/active_record/test_fixtures.rb
Defined Under Namespace
Modules: ClassMethods
Instance Method Summary collapse
-
#after_teardown ⇒ Object
:nodoc:.
-
#before_setup ⇒ Object
:nodoc:.
- #enlist_fixture_connections ⇒ Object
- #run_in_transaction? ⇒ Boolean
- #setup_fixtures(config = ActiveRecord::Base) ⇒ Object
- #teardown_fixtures ⇒ Object
Instance Method Details
#after_teardown ⇒ Object
:nodoc:
14 15 16 17 |
# File 'lib/active_record/test_fixtures.rb', line 14 def after_teardown # :nodoc: super teardown_fixtures end |
#before_setup ⇒ Object
:nodoc:
9 10 11 12 |
# File 'lib/active_record/test_fixtures.rb', line 9 def before_setup # :nodoc: setup_fixtures super end |
#enlist_fixture_connections ⇒ Object
186 187 188 189 190 |
# File 'lib/active_record/test_fixtures.rb', line 186 def enlist_fixture_connections setup_shared_connection_pool ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection) end |
#run_in_transaction? ⇒ Boolean
100 101 102 103 |
# File 'lib/active_record/test_fixtures.rb', line 100 def run_in_transaction? use_transactional_tests && !self.class.uses_transaction?(name) end |
#setup_fixtures(config = ActiveRecord::Base) ⇒ Object
105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 |
# File 'lib/active_record/test_fixtures.rb', line 105 def setup_fixtures(config = ActiveRecord::Base) if pre_loaded_fixtures && !use_transactional_tests raise RuntimeError, "pre_loaded_fixtures requires use_transactional_tests" end @fixture_cache = {} @fixture_connections = [] @@already_loaded_fixtures ||= {} @connection_subscriber = nil @legacy_saved_pool_configs = Hash.new { |hash, key| hash[key] = {} } @saved_pool_configs = Hash.new { |hash, key| hash[key] = {} } # Load fixtures once and begin transaction. if run_in_transaction? if @@already_loaded_fixtures[self.class] @loaded_fixtures = @@already_loaded_fixtures[self.class] else @loaded_fixtures = load_fixtures(config) @@already_loaded_fixtures[self.class] = @loaded_fixtures end # Begin transactions for connections already established @fixture_connections = enlist_fixture_connections @fixture_connections.each do |connection| connection.begin_transaction joinable: false, _lazy: false connection.pool.lock_thread = true if lock_threads end # When connections are established in the future, begin a transaction too @connection_subscriber = ActiveSupport::Notifications.subscribe("!connection.active_record") do |_, _, _, _, payload| spec_name = payload[:spec_name] if payload.key?(:spec_name) shard = payload[:shard] if payload.key?(:shard) setup_shared_connection_pool if ActiveRecord::Base.legacy_connection_handling if spec_name begin connection = ActiveRecord::Base.connection_handler.retrieve_connection(spec_name, shard: shard) rescue ConnectionNotEstablished connection = nil end if connection setup_shared_connection_pool unless ActiveRecord::Base.legacy_connection_handling if !@fixture_connections.include?(connection) connection.begin_transaction joinable: false, _lazy: false connection.pool.lock_thread = true if lock_threads @fixture_connections << connection end end end end # Load fixtures for every test. else ActiveRecord::FixtureSet.reset_cache @@already_loaded_fixtures[self.class] = nil @loaded_fixtures = load_fixtures(config) end # Instantiate fixtures for every test if requested. instantiate_fixtures if use_instantiated_fixtures end |
#teardown_fixtures ⇒ Object
169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'lib/active_record/test_fixtures.rb', line 169 def teardown_fixtures # Rollback changes if a transaction is active. if run_in_transaction? ActiveSupport::Notifications.unsubscribe(@connection_subscriber) if @connection_subscriber @fixture_connections.each do |connection| connection.rollback_transaction if connection.transaction_open? connection.pool.lock_thread = false end @fixture_connections.clear teardown_shared_connection_pool else ActiveRecord::FixtureSet.reset_cache end ActiveRecord::Base.clear_active_connections! end |