Quanti di voi, durante gli integration test, eseguono delle verifiche
nel
database per verificare delle expectations?
Io lo sto facendo con capybara, per controllare che i background jobs
facciano il loro dovere.
Ma la cosa non proprio gradevole, mi trovo a mettere degli sleep in
giro
(degli sleep, non slip :D).
So che bisognerebbe testare solo l’interfaccia, ma controllare anche i
record nel mio caso ha un gran valore.
Sidekiq in testing mode. Il processing the jobs quindi sincrono nel
test,
il problema che secondo me passa del tempo tra l’evento che si svolge
in
capybara e quello che io posso raccogliere durante l’esecuzione del test
visto che i thread sono diversi.
Esempio:
creo un record ‘site’ nel database usando factory_girl
carico una pagna relativa al record ‘site’
un javascript alquanto complesso viene eseguito
pollo la pagina con eval_javascript per vedere se un determinato
elemento presente nella pagina
quando quell’elemento visibile mi aspetto che sia partita una
chiamata
ajax per registrare un evento server side
l’evento server side registra un record con sidekiq
faccio la query per vedere se l’evento stato registrato nel db
Ho un dubbio anche che il punto 0 sia consistente con l’integration
test.
Nello specifico ora mi trovo ad avere degli errori RecordNotFound al
punto
1, come se non trovasse il record che stato creato al punto 0. Non
capita
sempre.
Ho trovato un thread che sembra rientrare nel caso in cui mi trovo.
DatabaseCleaner potrebbe essere responsabile del problema. In
particolare
lo switch tra transaction e truncation.
ho configurato tutto a truncation, togliendo la configurazione per la
transaction. Ora ho un DatabaseCleaner.clean nella config
before(:each).
Ancora problemi del genere per.
Thankyou so much. append_after non lo conoscevo. lo switch a truncation
quello che facevo prima. Ora ho corretto la configurazione e usando solo
truncation non ho pi problemi. Probabilmente avevo lo switch tra
transaction e truncation nel modo sbagliato, riprover. E poster la
configurazione.
Se ti serve una configurazione funzionante una roba tipo:
Se riesci ad usare :deletion anzich :truncation meglio, almeno se hai
davvero tante tabelle.
Escludi quelle che hai in seeds dalla deletion et voil. Togli tutti gli
sleep (e slip) che fanno male all’ambiente.
RSpec.configure do |config| config.use_transactional_fixtures = false
excluded_tables
= %w[tabella_a tabella_b tabella_seed] config.before(:each) do
ActionMailer
::Base.deliveries.clear Sidekiq::Worker.clear_all end
config.before(:each)
do
DatabaseCleaner.strategy = :deletion, {:except => excluded_tables}
DatabaseCleaner.start
end config.after(:each) do DatabaseCleaner.clean end
RSpec ce l’ho configurato cos (solo le parti relative a Sidekiq e
DatabaseCleaner) e funziona bene (coi test che necessitano Sidekiq
configurati con Sidekiq::Testing.inline!):
Sidekiq
config.before(:suite) do
# Suppress INFO logs such as 2014-08-07T14:07:16Z 24394
TID-otrdqgz00
INFO: Sidekiq client with redis options {}
Sidekiq.logger.level = Logger::WARN
end
config.before(:example) do |example_method|
# Clears out the jobs for tests using the fake testing
Sidekiq::Worker.clear_all
end
DatabaseCleaner
config.before(:suite) do
DatabaseCleaner.clean_with :truncation
end
config.before(:example) do
DatabaseCleaner.strategy = :transaction
end
Extract from
:
Capybara fires up a test server process and drives an actual browser
window via the Selenium backend.
For these types of tests, transactions won’t work, so this code
overrides the setting and chooses the ‘truncation’ strategy instead.
config.before(:example, js: true) do
DatabaseCleaner.strategy = :truncation
end
config.before(:example) do
DatabaseCleaner.start
end
config.append_after(:each) do
DatabaseCleaner.clean
end
–
Maurizio De Santis
Il giorno 02 ottobre 2014 15:21, Fabrizio R. [email protected]
ha
scritto: