Рельсы: огурец не чистит дБ - PullRequest
5 голосов
/ 22 августа 2011

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

Я запускаю rails 3.1 с spork, postgres.

Изначально файл functions / 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:in new_connection '/Пользователи / john / .rvm / gems / ruby-1.9.2-p290 / gems / activerecord-3.1.0.rc4 / lib / active_record / connection_adapters / abstract / connection_pool.rb: 302: в блоке 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:in (2 уровня)in checkout '/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:in 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:in blockin checkout '/Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:in 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:in checkout' /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:in 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:in retrieve_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:in connection '/Users/john/.rvm/gems/ruby-1.90,2-P290 / драгоценные камни / database_cleaner-0.6.7 / Библиотека /database_cleaner / active_record /action.rb: 17: в clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/base.rb:77:in clean '/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:in каждый '/Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56:in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/database_cleaner.rb:9:in После'

Я пытался вернуться к обычным транзакциям, но без радости.Я могу получить доступ к базе данных через консоль (огуречная среда) и без проблем создавать / удалять / извлекать записи.Файлы config / database.yml, features / support / env.rb, config / environment / 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

CONFIG / ENVIRONMENTS / 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

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", FILE ) требуется 'rspec / rails'

# Требуется поддержка файлов ruby ​​с пользовательскими сопоставлениями и макросами и т. Д., # В spec / support / и его подкаталогах.
Dir [Rails.root.join(«spec / support / * / .rb»)]. каждый {| f |require 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 fixtures # config.fixture_path = "# {:: Rails.root} / spec / fixtures"

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

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

end

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

end

Ответы [ 2 ]

1 голос
/ 23 августа 2011

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

0 голосов
/ 23 августа 2011

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

...