У меня есть некоторые проблемы с транзакциями огурца и базы данных - в частности, когда я запускаю набор тестов, транзакции базы данных не очищаются впоследствии.
Я запускаю 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