Module: ActiveRecord::TestFixtures

Extended by:
ActiveSupport::Concern
Defined in:
lib/active_record/fixtures.rb

Defined Under Namespace

Modules: ClassMethods

Instance Method Summary collapse

Instance Method Details

#after_teardownObject



830
831
832
833
# File 'lib/active_record/fixtures.rb', line 830

def after_teardown
  super
  teardown_fixtures
end

#before_setupObject



825
826
827
828
# File 'lib/active_record/fixtures.rb', line 825

def before_setup
  setup_fixtures
  super
end

#enlist_fixture_connectionsObject



973
974
975
# File 'lib/active_record/fixtures.rb', line 973

def enlist_fixture_connections
  ActiveRecord::Base.connection_handler.connection_pool_list.map(&:connection)
end

#run_in_transaction?Boolean

Returns:

  • (Boolean)


922
923
924
925
# File 'lib/active_record/fixtures.rb', line 922

def run_in_transaction?
  use_transactional_fixtures &&
    !self.class.uses_transaction?(method_name)
end

#setup_fixtures(config = ActiveRecord::Base) ⇒ Object



927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
# File 'lib/active_record/fixtures.rb', line 927

def setup_fixtures(config = ActiveRecord::Base)
  if pre_loaded_fixtures && !use_transactional_fixtures
    raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'
  end

  @fixture_cache = {}
  @fixture_connections = []
  @@already_loaded_fixtures ||= {}

  # 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
    @fixture_connections = enlist_fixture_connections
    @fixture_connections.each do |connection|
      connection.begin_transaction joinable: false
    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_fixturesObject



959
960
961
962
963
964
965
966
967
968
969
970
971
# File 'lib/active_record/fixtures.rb', line 959

def teardown_fixtures
  # Rollback changes if a transaction is active.
  if run_in_transaction?
    @fixture_connections.each do |connection|
      connection.rollback_transaction if connection.transaction_open?
    end
    @fixture_connections.clear
  else
    ActiveRecord::FixtureSet.reset_cache
  end

  ActiveRecord::Base.clear_active_connections!
end