Trabalhando com verificações e esperas de elementos com o Capybara,SitePrism e Rspec.(Parte III).

Bruno Batista
automação com batista
2 min readJun 6, 2018

Este post sobre wait_for_ajax é uma tradução do post original da Thoughtbot.

Wait_for_ajax

Capybara é muito bom em esperar por AJAX. Por exemplo, esse código continuará verificando a página do elemento para Capybara.default_max_wait_time segundos, permitindo que as chamadas AJAX terminem:

Mas há momentos em que isso não é suficiente. Por exemplo, neste código:

Temos uma condição de corrida entre click_link e reload_page. Às vezes, a chamada AJAX passa antes que a Capybara recarregue a página, e às vezes não. Esse tipo de teste não determinístico pode ser muito difícil de debugar, então eu adicionei um pequeno helper.

Helper:

Nós automaticamente incluímos todos os arquivos em /support em nosso helper.rb, então este arquivo é automaticamente requerido. Como apenas as especificações de recursos podem interagir com a página por meio de JavaScript ,O auxiliar usa a variável jQuery.active, que rastreia o número de solicitações AJAX ativas. Quando é 0, não há solicitações AJAX ativas, o que significa que todas as solicitações foram concluídas.

Veja como eu uso:

Agora não há nenhuma condição de corrida: a Capybara irá esperar que a solicitação de amizade do AJAX seja concluída antes de recarregar a página.

Se for usar dentro de um page objects basta incluir o módulo

Não há documentação oficial no jQuery.active, pois é uma variável interna, mas essa resposta do Stack Overflow é útil. Para ver como precisamos de todos os arquivos na especificação / suporte, leia nosso modelo spec_helper.

Créditos:

Agradecemos a Jorge Dias e Ancor Cruz, da Coderwall, pelas implementações auxiliares originais e refatoradas.

--

--