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

#run_in_transaction?Boolean

Returns:

  • (Boolean)


924
925
926
927
# File 'lib/active_record/fixtures.rb', line 924

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

#setup_fixturesObject



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

def setup_fixtures
  return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?

  if pre_loaded_fixtures && !use_transactional_fixtures
    raise RuntimeError, 'pre_loaded_fixtures requires use_transactional_fixtures'
  end

  @fixture_cache = {}
  @@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
      load_fixtures
      @@already_loaded_fixtures[self.class] = @loaded_fixtures
    end
    ActiveRecord::Base.connection.increment_open_transactions
    ActiveRecord::Base.connection.transaction_joinable = false
    ActiveRecord::Base.connection.begin_db_transaction
  # Load fixtures for every test.
  else
    Fixtures.reset_cache
    @@already_loaded_fixtures[self.class] = nil
    load_fixtures
  end

  # Instantiate fixtures for every test if requested.
  instantiate_fixtures if use_instantiated_fixtures
end

#teardown_fixturesObject



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

def teardown_fixtures
  return unless defined?(ActiveRecord) && !ActiveRecord::Base.configurations.blank?

  unless run_in_transaction?
    Fixtures.reset_cache
  end

  # Rollback changes if a transaction is active.
  if run_in_transaction? && ActiveRecord::Base.connection.open_transactions != 0
    ActiveRecord::Base.connection.rollback_db_transaction
    ActiveRecord::Base.connection.decrement_open_transactions
  end
  ActiveRecord::Base.clear_active_connections!
end