Рельсы: Огурец не очищает БД

У меня возникают проблемы с транзакциями огурца и базы данных - в частности, когда я запускаю набор тестов, транзакции базы данных впоследствии не очищаются.

Я использую rails 3.1 со spork, postgres.

Первоначально функции / support / env.rb были настроены на использование database_cleaner, но при каждом обращении к базе данных постоянно возникала следующая ошибка:

База данных не указана. Отсутствует аргумент: база данных. (ArgumentError) /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/postgresql_adapter.rb:22:in postgresql_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:292:innew_connection '/ Users / john /.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:302:in checkout_new_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:254:inblock (2 уровня) в кассе '/ Пользователи / john / .rvm / gems / ruby-1.9.2-p290 / gems / activerecord-3.1.0.rc4 / lib / active_record / connection_adapters / abstract / connection_pool.rb: 250: в loop' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:250:inblock в кассе '/ Users / john /. rvm / rubies / ruby-1.9.2-p290 / lib / ruby ​​/ 1.9.1 / monitor.rb: 201: в mon_synchronize' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:249:incheckout '/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord -3.1.0.rc4 / lib / active_record / connection_adapters / abstract / connection_pool.rb: 151: в connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb:388:inretrieve_connection '/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.0. rc4 / lib / active_record / connection_adapters / abstract / connection_specification.rb: 107: в retrieve_connection' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/active_record.rb:7:inconnection '/Users/john/.rvm/gems/ruby-1.9.2 -p290 / gems / database_cleaner-0.6.7 / lib / database_cleaner / active_record / transaction.rb: 17: в clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/base.rb:77:inclean '/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6. 7 / lib / database_cleaner / configuration.rb: 56: в block in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56:ineach '/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56 : в clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/database_cleaner.rb:9:inAfter '

Я попытался вернуться к обычным транзакциям, но безуспешно. Я могу получить доступ к базе данных через консоль (среда огурца) и без проблем создавать / удалять / извлекать записи. Ниже добавлены файлы config / database.yml, features / support / env.rb, config / environments / cucumber.rb и rspec / spec_helper.rb. Любые предложения очень ценятся - это меня в течение некоторого времени ставило в тупик:

CONFIG / DATABASE.yml

default: &defaults
  adapter: postgresql
  username: rails_dev
  password: foobar

development:
  <<: *defaults
  database: fcct_d

test: &test
  <<: *defaults
  database: fcct_t

production:
  <<: *defaults
  database: fcct_p
  username: fcct
  password: k#1*5Avb3dTa

cucumber:
  adapter: postgresql
  username: rails_dev
  password: foobar
  database: fcct_t

ОСОБЕННОСТИ / ПОДДЕРЖКА / ENV.RB

require 'rubygems'
require 'spork'

Spork.prefork do
  require 'cucumber/rails'
  require 'database_cleaner'
  require 'database_cleaner/cucumber'


  Capybara.default_selector = :css

  ActionController::Base.allow_rescue = false

  begin
    DatabaseCleaner.strategy = :transaction
  rescue NameError
    raise "You need to add database_cleaner to your Gemfile (in the :test group) if you wish to use it."
  end

end

Spork.each_run do
  require 'factory_girl'
  require File.join(File.dirname(__FILE__), '../../lib/existing_factory/existing_factory.rb')
end

КОНФИГ / СРЕДА / CUCUMBER.RB

BusinessschoolCorporate :: Application.configure do # Параметры, указанные здесь, будут иметь приоритет над параметрами в config / application.rb

# Тестовая среда используется исключительно для запуска вашего приложения

тестирование. В противном случае вам никогда не придется с ним работать. Помнить

что # ваша тестовая база данных - это "временное пространство" для набора тестов, которое # стирается и воссоздается между тестовыми запусками. Не полагайтесь на имеющиеся там данные!
config.cache_classes = true
config.use_transactional_fixtures = true

# Настроить статический сервер ресурсов для тестов с помощью Cache-Control для повышения производительности config.serve_static_assets = true
config.static_cache_control = "public, max-age = 3600"

# Записывать сообщения об ошибках, когда вы случайно вызываете методы на nil
config.whiny_nils = true

# Показать полные отчеты об ошибках и отключить кеширование
config.consider_all_requests_local = true
config.action_controller.perform_caching = false

# Поднимать исключения вместо шаблонов исключений для рендеринга
config.action_dispatch.show_exceptions = false

# Отключить защиту от подделки запросов в тестовой среде
config.action_controller.allow_forgery_protection = false

# Скажите Action Mailer не доставлять электронные письма в реальный мир. # Метод доставки: test накапливает отправленные электронные письма в массиве # ActionMailer :: Base.deliveries.
config.action_mailer.delivery_method =: test

# Используйте SQL вместо дампера схемы Active Record при создании тестовой базы данных. # Это необходимо, если ваша схема не может быть полностью выгружена дампером схемы, # например, если у вас есть ограничения или типы столбцов, специфичные для базы данных # config.active_record.schema_format =: sql

# Печатать уведомления об устаревании в stderr
config.active_support.deprecation =: stderr end

SPEC / SPEC_HELPER.RB

требовать 'rubygems' требовать 'spork'

Spork.prefork do # Загрузка большего количества в этот блок заставит ваши тесты работать быстрее. Однако, # если вы измените какую-либо конфигурацию или код из загруженных здесь библиотек, вам нужно # перезапустить spork, чтобы он вступил в силу. # Этот файл копируется в spec / при запуске 'rails generate rspec: install' ENV ["RAILS_ENV"] || = 'test' require File.expand_path ("../../ config / environment", ФАЙЛ) требуется 'rspec / rails'

# Требуется поддержка рубиновых файлов с настраиваемыми сопоставлениями, макросами и т. Д. # В spec / support / и его подкаталогах.
Dir [Rails.root.join ("spec / support / * / .rb ")]. каждый {| f | требуется f}

RSpec.configure do | config | # == Mock Framework # # Если вы предпочитаете использовать mocha, flexmock или RR, раскомментируйте соответствующую строку: # # config.mock_with: mocha # config.mock_with: flexmock # config.mock_with: rr config.mock_with: rspec

# Remove this line if you're not using ActiveRecord or

Приспособления ActiveRecord # config.fixture_path = "# {:: Rails.root} / spec / fixtures"

# If you're not using ActiveRecord, or you'd prefer not to run

Для каждого из # примеров в транзакции удалите следующую строку или назначьте false # вместо true. config.use_transactional_fixtures = истинный конец

конец

Spork.each_run do # Этот код будет запускаться каждый раз, когда вы запускаете свои спецификации.

конец


person PlankTon    schedule 22.08.2011    source источник


Ответы (2)


Для тех, кто задается вопросом - это тот факт, что в моем файле config / database.yml были значения & по умолчанию. Очиститель баз данных имеет собственный вызов defaults, который перехватывает информацию о конфигурации.

person PlankTon    schedule 23.08.2011

Почему бы вам не попробовать поместить config.use_transactional_fixtures = true в свой CONFIG/ENVIRONMENTS/CUCUMBER.RB файл?

person sebasuy    schedule 23.08.2011
comment
Привет, Себастьян - спасибо за ответ. Транзакционные фикстуры были установлены как истинные, изменили их, чтобы посмотреть, могу ли я диагностировать ошибку (исправил выше). К сожалению, такая же проблема. Все равно спасибо - person PlankTon; 23.08.2011