Module: ActiveRecord::TestFixtures

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

Defined Under Namespace

Modules: ClassMethods

Constant Summary

@@required_fixture_classes =

for pre_loaded_fixtures, only require the classes once. huge speed improvement

false

Instance Method Summary collapse

Methods included from ActiveSupport::Concern

append_features, extended, included

Instance Method Details

#run_in_transaction?Boolean

Returns:

  • (Boolean)


870
871
872
873
# File 'activerecord/lib/active_record/fixtures.rb', line 870

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

#setup_fixturesObject



875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
# File 'activerecord/lib/active_record/fixtures.rb', line 875

def setup_fixtures
  return unless !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
      @loaded_fixtures = 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
    ActiveRecord::Fixtures.reset_cache
    @@already_loaded_fixtures[self.class] = nil
    @loaded_fixtures = load_fixtures
  end

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

#teardown_fixturesObject



907
908
909
910
911
912
913
914
915
916
917
918
919
920
# File 'activerecord/lib/active_record/fixtures.rb', line 907

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

  unless run_in_transaction?
    ActiveRecord::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