Ho un'applicazione rails3.2.10 testata con rspec (2.12.0) e utilizzando database_cleaner (0.9.1 f4b44bb) con due connessioni database per mysql.
Questi sono situati nel database.yml qualcosa di simile:
test:
...
database: my_app_test
test_my_second_connection:
...
database: my_second_connection_test
La seconda banca dati è collegato in classe del modello con stabilire la connessione.
sono stato in grado di utilizzare le seguenti impostazioni nel mio spec/spec_helper.rb file in base al 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
Inoltre devo usare per alcune parti della suite di test di infissi non transazionali . Così ho dovuto aggiungere le informazioni meta : db_truncate => true nelle mie specifiche e le impostazioni come questo, al fine di cambiare la strategia in prova:
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
fonte
2013-01-07 14:20:43
Spero si arriva con una soluzione l'anno scorso ci siamo occupati di questo problema e ci sono volute centinaia di tentativi e iterazioni di errore, e alla fine la soluzione era un hack completamente disordinato. – fguillen
@ fguillen potresti entrare nei dettagli? Felice di sentire come lo hai fatto – HannesFostie
Come ho detto è stato un disordinato trucco molto difficile da ricordare, ora sto vedendo lo stato attuale del progetto e sto vedendo che hanno appena finito di aggiungere un metodo 'test_helper.rb' con un molto di 'ModelName.destroy_all' :) – fguillen