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



810
811
812
813
# File 'lib/active_record/fixtures.rb', line 810

def after_teardown
  super
  teardown_fixtures
end

#before_setupObject



805
806
807
808
# File 'lib/active_record/fixtures.rb', line 805

def before_setup
  setup_fixtures
  super
end

#enlist_fixture_connectionsObject



978
979
980
# File 'lib/active_record/fixtures.rb', line 978

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

#run_in_transaction?Boolean

Returns:

  • (Boolean)


927
928
929
930
# File 'lib/active_record/fixtures.rb', line 927

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

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



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
958
959
960
961
962
# File 'lib/active_record/fixtures.rb', line 932

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(config) if use_instantiated_fixtures
end

#teardown_fixturesObject



964
965
966
967
968
969
970
971
972
973
974
975
976
# File 'lib/active_record/fixtures.rb', line 964

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