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
-
#fixture_path ⇒ Object
:nodoc:.
- #run_in_transaction? ⇒ Boolean
- #setup_fixtures(config = ActiveRecord::Base) ⇒ Object
- #teardown_fixtures ⇒ Object
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, **kwargs, &block) ⇒ Object (private)
275 276 277 278 279 280 281 |
# File 'lib/active_record/test_fixtures.rb', line 275 def method_missing(name, *args, **kwargs, &block) if fs_name = fixture_sets[name.to_s] access_fixture(fs_name, *args, **kwargs, &block) else super end end |
Instance Method Details
#after_teardown ⇒ Object
:nodoc:
14 15 16 17 18 |
# File 'lib/active_record/test_fixtures.rb', line 14 def after_teardown # :nodoc: super ensure 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
206 207 208 209 210 |
# File 'lib/active_record/test_fixtures.rb', line 206 def enlist_fixture_connections setup_shared_connection_pool ActiveRecord::Base.connection_handler.connection_pool_list(:writing).map(&:connection) end |
#fixture_path ⇒ Object
:nodoc:
113 114 115 116 117 118 119 120 |
# File 'lib/active_record/test_fixtures.rb', line 113 def fixture_path # :nodoc: ActiveRecord.deprecator.warn(<<~WARNING) TestFixtures#fixture_path is deprecated and will be removed in Rails 7.2. Use #fixture_paths instead. If multiple fixture paths have been configured with #fixture_paths, then #fixture_path will just return the first path. WARNING fixture_paths.first end |
#run_in_transaction? ⇒ Boolean
122 123 124 125 |
# File 'lib/active_record/test_fixtures.rb', line 122 def run_in_transaction? use_transactional_tests && !self.class.uses_transaction?(name) end |
#setup_fixtures(config = ActiveRecord::Base) ⇒ Object
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 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/active_record/test_fixtures.rb', line 127 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 @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| connection_name = payload[:connection_name] if payload.key?(:connection_name) shard = payload[:shard] if payload.key?(:shard) if connection_name begin connection = ActiveRecord::Base.connection_handler.retrieve_connection(connection_name, shard: shard) rescue ConnectionNotEstablished connection = nil end if connection setup_shared_connection_pool 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
189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 |
# File 'lib/active_record/test_fixtures.rb', line 189 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.connection_handler.clear_active_connections!(:all) end |