Tôi đang gặp một số vấn đề với dưa chuột & giao dịch cơ sở dữ liệu - cụ thể là khi tôi chạy bộ thử nghiệm, các giao dịch cơ sở dữ liệu không được làm sạch sau đó.Rails: Dưa chuột không làm sạch DB
Tôi đang chạy đường ray 3.1 với spork, postgres.
Ban đầu tính năng/support/env.rb được thiết lập để sử dụng database_cleaner, nhưng luôn có những lỗi sau trên mỗi cuộc gọi đến các db:
Không cơ sở dữ liệu cụ thể. Thiếu đối số: cơ sở dữ liệu. (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 ' /Người dùng/john/.rvm/đá quý/ruby-1.9.2-p290/đá quý/activerecord-3.1.0.rc4/lib/active_record/connection_adapters/abstract/connection_pool.rb: 302: trong số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
khối (2 cấp độ) khi thanh toán ' /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:inloop' /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
chặn khi thanh toán' /Users/john/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/1.9.1/monitor.rb:201:inmon_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: inconnection' /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:inretrieve_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
kết nối' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/active_record/transaction.rb:17:inclean' /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: inblock in clean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb:56:in
mỗi ' /Users/john/.rvm/gems/ruby-1.9.2 -p290/gems/database_cleaner-0.6.7/lib/database_cleaner/configuration.rb: 56: inclean' /Users/john/.rvm/gems/ruby-1.9.2-p290/gems/cucumber-rails-1.0.2/lib/cucumber/rails/hooks/database_cleaner.rb:9:in
Sau '
Tôi đã cố gắng quay trở lại các giao dịch thường xuyên, nhưng không có niềm vui. Tôi có thể truy cập cơ sở dữ liệu thông qua giao diện điều khiển (môi trường dưa chuột) và tạo/xóa/truy xuất các bản ghi mà không có vấn đề gì. Các tệp config/database.yml, các tính năng/hỗ trợ/env.rb, config/environment/cucumber.rb và rspec/spec_helper.rb được thêm vào dưới đây. Bất kỳ lời đề nghị rất đánh giá cao - một trong những điều này đã đã cho tôi bối rối trong một thời gian:
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
TÍNH NĂNG/HỖ TRỢ/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/MÔI TRƯỜNG/DƯA CHUỘT .RB
BusinessschoolCorporate :: Application.configure do # Settings được chỉ định tại đây sẽ được ưu tiên hơn những người trong config/application.rb
# Các môi trường thử nghiệm được sử dụng độc quyền để chạy bộ kiểm tra
ứng dụng của bạn. Bạn không bao giờ cần phải làm việc với nó nếu không. Hãy nhớ
rằng # cơ sở dữ liệu thử nghiệm của bạn là "không gian đầu" cho bộ kiểm tra và bị xóa # và được tạo lại giữa các lần chạy thử nghiệm.Đừng dựa vào dữ liệu ở đó!
config.cache_classes = true
config.use_transactional_fixtures = true# Cấu hình máy chủ tài sản tĩnh cho thử nghiệm với Cache-Control cho config.serve_static_assets hiệu suất = true
config.static_cache_control = "công cộng, max-age = 3600"# Log thông báo lỗi khi bạn vô tình gọi các phương thức trên nil
config.whiny_nils = true# Hiển thị các báo cáo lỗi đầy đủ và vô hiệu hóa bộ nhớ đệm
config.consider_all_requests_local = true
config.action_controller.perform_caching = false# Nâng cao ngoại lệ thay vì render mẫu ngoại lệ
config.action_dispatch.show_exceptions = false# Disable bảo vệ yêu cầu giả mạo trong môi trường thử nghiệm
config.action_controller.allow_forgery_protection = false# Cho người gửi thư không gửi email đến thế giới thực. # Phương pháp phân phối thử nghiệm tích lũy email đã gửi trong mảng # ActionMailer :: Base.deliveries.
config.action_mailer.delivery_method =: test# Sử dụng SQL thay vì lược đồ thử nghiệm của Bản ghi hiện hoạt khi tạo cơ sở dữ liệu kiểm tra . # Đây là cần thiết nếu schema của bạn không thể hoàn toàn đổ bởi dumper lược đồ, # như thế nào nếu bạn có hạn chế hoặc loại cột cơ sở dữ liệu cụ thể # config.active_record.schema_format =: sql
# In deprecation thông báo đến stderr
config.active_support.deprecation =: stderr kết thúc
SPEC/SPEC_HELPER.RB
require 'rubygems' đòi hỏi 'Spork'
Spork.prefork do # Tải thêm trong khối này sẽ làm cho các thử nghiệm của bạn chạy nhanh hơn. Tuy nhiên, # nếu bạn thay đổi bất kỳ cấu hình hoặc mã nào từ các thư viện được tải tại đây, bạn sẽ cần phải khởi động lại spork cho nó có hiệu lực. # Tệp này được sao chép vào thông số/khi bạn chạy 'đường ray tạo rspec: cài đặt' ENV ["RAILS_ENV"] || = 'test' yêu cầu Tệp.expand_path ("../../ config/environment", fILE) yêu cầu 'rspec/đường ray'
# Yêu cầu hỗ trợ file ruby với quẹt tùy chỉnh và macro, vv, # trong spec/support/và thư mục con của nó.
Dir [Rails.root.join ("spec/support/* / .rb")]. Mỗi {| f | yêu cầu f}RSpec.cấu hình do | config | # == Mock Khung # # Nếu bạn thích sử dụng mocha, flexmock hoặc RR, hãy uncomment dòng thích hợp: # # 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 đồ đạc # config.fixture_path = "# {:: Rails.root}/spec/đồ đạc"
# If you're not using ActiveRecord, or you'd prefer not to run
mỗi số # ví dụ trong một giao dịch, xóa dòng sau hoặc gán false # thay vì đúng. config.use_transactional_fixtures = true cuối
cuối
Spork.each_run làm # Mã này sẽ được chạy mỗi khi bạn chạy thông số kỹ thuật của bạn.
cuối
Hi Sebastian - cảm ơn phản hồi. Các đồ đạc giao dịch được đặt là true, đã thay đổi chúng để xem liệu tôi có thể chẩn đoán lỗi (đã sửa chữa ở trên) hay không. Thật không may, cùng một vấn đề. Cảm ơn dù sao đi nữa – PlankTon