Ho un test di integrazione di Rails che non funziona e non riesco a capire perché. Sto usando Capybara con Selenium come driver.Test di integrazione di Capybara con JavaScript asincrono
Il test verifica che il contenuto della pagina sia stato rimosso dopo una chiamata AJAX. L'azione rilevante è che un pulsante viene cliccato, e quel clic sul pulsante fa sì che una sezione della pagina venga rimossa tramite una chiamata jQuery remove()
. Ecco un'approssimazione del codice di test di integrazione:
click_button("Remove stuff")
assert has_no_link?("This should be removed")
L'affermazione non riesce, il che implica che il collegamento esiste ancora.
Ho letto su Capybara e so che è possibile prolungare il tempo di attesa predefinito. L'ho esteso a un valore ridicolo (20 secondi), eppure l'asserzione fallisce.
quando seguo il processo di test io manualmente, il fonte della pagina mostra ancora il contenuto, ma il DOM non lo fa (visualizzando DOM Inspector di Firefox e alla ricerca per l'elemento). È questo il problema? Ho anche provato a controllare il DOM mentre i test sono in esecuzione in Firefox per verificare se il contenuto era lì, e non sembra essere.
Non ho idea di come Capybara trovi ancora questo collegamento che non esiste più nel DOM. Capybara sta esaminando la fonte invece del DOM e trovando il collegamento lì? Se è così, non ho idea di come risolvere questo test per assicurarmi che il test passi. Aggiornare la pagina risolverebbe il problema, ma non è esattamente quello che farebbe un utente, quindi esito a cambiare pagina solo per fare passare il test ...
Mi piacerebbe qualche consiglio su come affrontare questo problema.
Grazie!
Hai finalmente trovato una soluzione al tuo problema? Ne ho uno simile e mi chiedo se puoi essere di qualche aiuto per me. –
No, sfortunatamente no. Ho speso troppo per far funzionare quel singolo test, quindi ho finito per commentare, invece di risolverlo. Scusate, non posso essere più di aiuto ... Non ho avuto l'energia per immergermi profondamente dopo aver passato così tanto tempo! Sentiti libero di rispondere alla domanda se lo capisci e sarò felice di darti credito! – aardvarkk
Ti sei ricordato di includere 'js: true' nella tua rspec? – RubeOnRails