Загрузка приборов ActiveRecord с помощью RSpec без Rails

Я использую некоторые модели ActiveRecord за пределами Rails, для которых я пишу модульные тесты. В своих тестах я хотел бы иметь возможность использовать фикстуры и подумал, что буду использовать некоторые из rspec-rails функции для этого. Я не могу просто использовать require "rspec-rails", потому что у него есть некоторые зависимости от Rails, а я не использую Rails.

Вот spec_helper, который я использую:

require 'active_record'
require 'active_record/fixtures'
require 'active_support'
require 'rspec/rails/extensions/active_record/base'
require 'rspec/rails/adapters'
require 'rspec/rails/fixture_support'  # Includes ActiveRecord::TestFixtures
                                       # into the RSpec config

require 'my_models'

# Setup database connection
environment = "test"
configuration = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.establish_connection(configuration[environment])

RSpec.configure do |config|
  config.fixture_path = File.expand_path("../../test/fixtures", __FILE__)

  # If you're not using ActiveRecord, or you'd prefer not to run each of your
  # examples within a transaction, remove the following line or assign false
  # instead of true.
  config.use_transactional_fixtures = true

  # Run specs in random order to surface order dependencies. If you find an
  # order dependency and want to debug it, you can fix the order by providing
  # the seed, which is printed after each run.
  #     --seed 1234
  config.order = "random"

  # Run each test inside a DB transaction
  config.around(:each) do |test|
    ActiveRecord::Base.transaction do
      test.run
      raise ActiveRecord::Rollback
    end
  end
end

А вот пример теста

require 'spec_helper'

describe Transaction do

  before :each do
    self.class.fixtures :users, :merchants
  end

  it "should do this and that" do
    ...
  end
end

Проблема в том, что таким образом фикстуры не загружаются. Я просмотрел код rspec-rails, но не могу понять, какой модуль мне следует расширить или метод, который я должен вызвать.


person Rodrigue    schedule 25.01.2013    source источник


Ответы (1)


Изучив код Active Record, я понял, что причина, по которой приборы не загружались, заключалась в том, что я не установил ActiveRecord::Base.configurations. Следующее устранило проблему:

configuration = YAML::load(File.open('config/database.yml'))
ActiveRecord::Base.configurations = configuration
person Rodrigue    schedule 25.03.2013