【发布时间】:2015-01-15 16:09:40
【问题描述】:
目前正在尝试使用 capybara/rspec/factory girl 测试多个数据库,尽管我的数据库清除存在问题。
查询错误:
': Mysql2::Error: Duplicate entry '1503' for key 'PRIMARY': INSERT INTO `users`
Facility_spec.rb
feature "User with facilities" do
@current_user = FactoryGirl.create(:user_with_facility)
scenario 'A user can perform a walk-through', :js => true do
login_as
visit '/'
expect(page).to have_text "Our records indicate that you have access to 1 facilities:"
...
end
@current_user = FactoryGirl.create(:user_with_facility)
scenario 'The quick-form requires first_name, last_name, and dob', :js => true do
login_as
visit '/'
expect(page).to have_text "Our records indicate that you have access to 1 facilities:"
...
end
end
rails_helper.rb
cleaner = DatabaseCleaner[:active_record,{:connection => :emp_portal_test}]
rt_cleaner = DatabaseCleaner[:active_record, {connection: :test_rt_treats}]
RSpec.configure do |config|
config.include Capybara::DSL
config.include FactoryGirl::Syntax::Methods
config.use_transactional_fixtures = false
config.before(:suite) do
cleaner.strategy = :truncation
rt_cleaner.strategy = :truncation
end
config.before(:each) do
cleaner.strategy = :truncation
rt_cleaner.strategy = :truncation
cleaner.start
rt_cleaner.start
end
config.before(:each, :js => true) do
cleaner.strategy = :truncation
rt_cleaner.strategy = :truncation
end
config.after(:each) do
cleaner.clean
rt_cleaner.clean
end
user_factory.rb
FactoryGirl.define do
factory :user do
id 33065
first_name "Andrew"
last_name "Larson"
select_id "al44096"
factory :user_with_facility do
after(:create) do |user|
user.facility_assignments << create(:facility)
end
end
end
factory :facility do
id 1550
ref_select_id 1550
status -1
name "St. Paul's Home & Apartments"
name_internal "St Paul's Home"
dept_id "R51"
...
end
当我在这个测试环境中创建一个新患者时,它会在我下次使用之前被擦除,尽管我不能在我的代码中使用相同的 current_user。
【问题讨论】:
-
您如何管理多个数据库连接?您是为此使用 gem 还是手动操作?
-
不完全确定您所说的“管理”是什么意思。我有 cleaner = DatabaseCleaner[:active_record,{:connection => :emp_portal_test}] rt_cleaner = DatabaseCleaner[:active_record, {connection: :test_rt_treats}] 每个都与数据库建立连接以执行清理任务。
标签: ruby-on-rails ruby rspec factory-bot multiple-databases