Module: ActiveRecord::TestFixtures
- Extended by:
- ActiveSupport::Concern
- Defined in:
- activerecord/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
Methods included from ActiveSupport::Concern
append_features, class_methods, extended, included, prepend_features, prepended
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, **kwargs, &block) ⇒ Object (private)
234 235 236 237 238 239 240 |
# File 'activerecord/lib/active_record/test_fixtures.rb', line 234 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 |
# File 'activerecord/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 'activerecord/lib/active_record/test_fixtures.rb', line 9 def before_setup # :nodoc: setup_fixtures super end |
#enlist_fixture_connections ⇒ Object
165 166 167 168 169 |
# File 'activerecord/lib/active_record/test_fixtures.rb', line 165 def enlist_fixture_connections setup_shared_connection_pool ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection) end |
#run_in_transaction? ⇒ Boolean
84 85 86 87 |
# File 'activerecord/lib/active_record/test_fixtures.rb', line 84 def run_in_transaction? use_transactional_tests && !self.class.uses_transaction?(name) end |
#setup_fixtures(config = ActiveRecord::Base) ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 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 |
# File 'activerecord/lib/active_record/test_fixtures.rb', line 89 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| spec_name = payload[:spec_name] if payload.key?(:spec_name) shard = payload[:shard] if payload.key?(:shard) setup_shared_connection_pool if spec_name begin connection = ActiveRecord::Base.connection_handler.retrieve_connection(spec_name, shard: shard) rescue ConnectionNotEstablished connection = nil end if connection && !@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 # 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
148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
# File 'activerecord/lib/active_record/test_fixtures.rb', line 148 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 |