Module: ActiveRecord::TestFixtures
- Extended by:
- ActiveSupport::Concern
- Included in:
- ActiveSupport::TestCase
- Defined in:
- activerecord/lib/active_record/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
Instance Method Details
#after_teardown ⇒ Object
:nodoc:
873 874 875 876 |
# File 'activerecord/lib/active_record/fixtures.rb', line 873 def after_teardown # :nodoc: super teardown_fixtures end |
#before_setup ⇒ Object
:nodoc:
868 869 870 871 |
# File 'activerecord/lib/active_record/fixtures.rb', line 868 def before_setup # :nodoc: setup_fixtures super end |
#enlist_fixture_connections ⇒ Object
1034 1035 1036 |
# File 'activerecord/lib/active_record/fixtures.rb', line 1034 def enlist_fixture_connections ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection) end |
#run_in_transaction? ⇒ Boolean
957 958 959 960 |
# File 'activerecord/lib/active_record/fixtures.rb', line 957 def run_in_transaction? use_transactional_tests && !self.class.uses_transaction?(method_name) end |
#setup_fixtures(config = ActiveRecord::Base) ⇒ Object
962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 |
# File 'activerecord/lib/active_record/fixtures.rb', line 962 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 # 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 connection.pool.lock_thread = true 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) if spec_name begin connection = ActiveRecord::Base.connection_handler.retrieve_connection(spec_name) rescue ConnectionNotEstablished connection = nil end if connection && !@fixture_connections.include?(connection) connection.begin_transaction joinable: false connection.pool.lock_thread = true @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
1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 |
# File 'activerecord/lib/active_record/fixtures.rb', line 1018 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 else ActiveRecord::FixtureSet.reset_cache end ActiveRecord::Base.clear_active_connections! end |