Tôi có ứng dụng rails3.2.10 được thử nghiệm với rspec (2.12.0) và sử dụng database_cleaner (0.9.1 f4b44bb) có hai kết nối cơ sở dữ liệu cho mysql.
Đây là những thiết lập trong database.yml cái gì đó như:
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
Cơ sở dữ liệu thứ hai được kết nối trong lớp mô hình với thiết lập kết nối.
tôi đã có thể sử dụng các cài đặt sau trong spec của tôi/spec_helper.rb tập tin theo manual of database_cleaner:
require 'database_cleaner'
RSpec.configure do |config|
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
config.before(:each) do
DatabaseCleaner.start
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].start
end
config.after(:each) do
DatabaseCleaner.clean
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].clean
end
end
Bên cạnh đó tôi có để sử dụng cho một số bộ phận của bài kiểm tra bộ đồ đạc không giao dịch . Vì vậy, tôi đã có thêm những thông tin meta : db_truncate => true trong thông số kỹ thuật của tôi và các thiết lập như thế này để thay đổi chiến lược trong chạy thử:
config.before(:suite) do
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
config.before(:each) do
if example.metadata[:db_truncation]
DatabaseCleaner.strategy = :truncation
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :truncation
else
DatabaseCleaner.start
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].start
end
end
config.after(:each) do
DatabaseCleaner.clean
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].clean
if example.metadata[:db_truncation]
DatabaseCleaner.strategy = :transaction
DatabaseCleaner[:active_record,{:connection => :test_my_second_connection}].strategy = :transaction
end
end
Nguồn
2013-01-07 14:20:43
Tôi hy vọng bạn tìm ra một giải pháp năm ngoái chúng tôi đã đối phó với vấn đề này và nó đã hundres thử và lặp đi lặp lại lỗi, và cuối cùng giải pháp là một hack hoàn toàn lộn xộn. – fguillen
@fguillen bạn có thể đi vào chi tiết không? Rất vui khi biết bạn đã làm như thế nào – HannesFostie
Như tôi đã nói đó là một hack lộn xộn rất khó nhớ, bây giờ tôi thấy trạng thái thực tế của dự án và tôi thấy họ vừa hoàn thành việc thêm phương thức 'test_helper.rb' với rất nhiều 'ModelName.destroy_all' :) – fguillen