Spork, RSpec и database_cleaner уничтожают базу данных разработки

у меня есть следующий файл spec_helper.rb в моем приложении Rails 3.1. Я использую Spork, чтобы быстрее загружать среду для тестирования. Все мои тесты работали до добавления Spork в микс. После добавления spork тестовая база данных не очищалась должным образом между тестовыми запусками, что отбросило некоторые из моих ожиданий.

Следуя другим инструкциям, я добавил в смесь database_cleaner с кодом, указанным ниже; однако сейчас база данных разработки очищается так же, как и тестовая база данных. Вызов ENV ["RAILS_ENV"] возвращает тест во время этого вызова.

Есть ли способ явно ограничить вызов DatabaseCleaner.clean_with (: truncation), чтобы он влиял только на тестовую базу данных?

require 'rubygems'
require 'spork'

Spork.prefork do
  ENV["RAILS_ENV"] ||= 'test'
  require File.expand_path("../../config/environment", __FILE__)
  require 'rspec/rails'
  require 'shoulda/matchers/integrations/rspec'
  require 'database_cleaner'

  Dir[Rails.root.join("spec/support/**/*.rb")].each {|f| require f}

  RSpec.configure do |config|
    config.mock_with :mocha

    config.formatter = 'documentation'
    config.use_transactional_fixtures = true

    config.before(:suite) do
      DatabaseCleaner.strategy = :truncation
    end

    config.before(:each) do
      DatabaseCleaner.start
    end

    config.after(:each) do
      DatabaseCleaner.clean
    end
  end
end

Spork.each_run do
  FactoryGirl.reload
end

Обновление: вот мой файл database.yml

development:
  adapter: sqlite3
  database: db/development.sqlite3
  pool: 5
  timeout: 5000

test:
  adapter: sqlite3
  database: db/test.sqlite3
  pool: 5
  timeout: 5000

production:
  adapter: sqlite3
  database: db/production.sqlite3
  pool: 5
  timeout: 5000

Кроме того, я работал над основным Проблема заключается в перемещении вызова clean_with в раздел before (: each), но это значительно замедляет выполнение теста.

8
задан Steve Mitcham 30 September 2011 в 21:33
поделиться