Eu estava testando algum AJAX em qatab hoje e me deparei com uma situação estranha – o Rails estava reconhecendo uma solicitação como uma solicitação JS, mas estava renderizando o template HTML, não o template JS. Isso funcionou muito bem no meu ambiente de desenvolvimento ao testar manualmente, mas ao testar com Capybara e Poltergeist eu estava vendo um comportamento estranho. Depois de muito pesquisar no Google, balançar a cabeça e testar coisas diferentes, descobri algo que funcionou.
Achei que talvez meu teste estivesse rodando “muito rápido” e que Poltergeist não estivesse esperando o AJAX terminar. Eu adicionei alguns códigos para garantir que a solicitação foi concluída:
find('#AddNoteForm').should_not be_visible
Só que isso não estava funcionando – meu teste ainda estava falhando porque Rails estava renderizando o template HTML. Depois de mais algumas pesquisas, mudei meu código para usar uma verificação diferente:
page.should have_css('#AddNoteForm', visible: false)
E, de repente, começou a funcionar como eu esperava.
Eu não sei porque ele se comporta de forma diferente, mas se você está tendo um problema onde o Rails está processando como JS, mas renderizando HTML, tente mudar sua verificação.