2011-08-22 38 views
5

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: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 chặn khi thanh toán' /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:in 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 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:in 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: in 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 mỗi ' /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 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

Trả lời

1

Đối với những người tự hỏi - đó là thực tế rằng tôi đã có mặc định & trong tệp config/database.yml của mình. Trình dọn dẹp cơ sở dữ liệu có một cuộc gọi mặc định của riêng nó, nó chặn các thông tin cấu hình.

0

Tại sao bạn không thử đặt config.use_transactional_fixtures = true trong tập tin CONFIG/ENVIRONMENTS/CUCUMBER.RB của bạn?

+0

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

Các vấn đề liên quan