У меня возникают проблемы с транзакциями огурца и базы данных - в частности, когда я запускаю набор тестов, транзакции базы данных впоследствии не очищаются.
Я использую 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:in
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:302:incheckout_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
block (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:in
block в кассе '/ 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: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: в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.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: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
each '/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:in
After '
Я попытался вернуться к обычным транзакциям, но безуспешно. Я могу получить доступ к базе данных через консоль (среда огурца) и без проблем создавать / удалять / извлекать записи. Ниже добавлены файлы 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 # Этот код будет запускаться каждый раз, когда вы запускаете свои спецификации.
конец