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

- (Boolean) run_in_transaction?

Returns:

  • (Boolean)


918
919
920
921
# File 'activerecord/lib/active_record/fixtures.rb', line 918

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

- (Object) setup_fixtures



923
924
925
926
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
# File 'activerecord/lib/active_record/fixtures.rb', line 923

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

- (Object) teardown_fixtures



955
956
957
958
959
960
961
962
963
964
965
966
967
968
# File 'activerecord/lib/active_record/fixtures.rb', line 955

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