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

:nodoc:



856
857
858
859
# File 'lib/active_record/fixtures.rb', line 856

def after_teardown # :nodoc:
  super
  teardown_fixtures
end

#before_setupObject

:nodoc:



851
852
853
854
# File 'lib/active_record/fixtures.rb', line 851

def before_setup # :nodoc:
  setup_fixtures
  super
end

#enlist_fixture_connectionsObject



1009
1010
1011
# File 'lib/active_record/fixtures.rb', line 1009

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

#run_in_transaction?Boolean

Returns:

  • (Boolean)


958
959
960
961
# File 'lib/active_record/fixtures.rb', line 958

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

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



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
# File 'lib/active_record/fixtures.rb', line 963

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 ||= {}

  # 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



995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
# File 'lib/active_record/fixtures.rb', line 995

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