Mostrando postagens com marcador cucumber. Mostrar todas as postagens

Cucumber + Capybara + Jquery: Como esperar requisições Ajax terminarem

Já tive vários problemas com testes de cucumber que quebram intermitentemente pois as vezes não esperam as requisições Ajax terminarem. Em vários casos desistimos desses testes pois não tínhamos achado uma solução.

Porém essa semana dei uma nova pesquisada e achei uma solução que está funcionando bem até agora.

O princípio é usar a função active do Jquery para saber quantas requisições de ajax (feitas pelo Jquery) ainda estão ativas.

Com isso, criei um novo step para meus testes Cucumber:

Given /^I wait for ajax loading$/ do
  5.times do
    break if page.evaluate_script("$.active") == 0
    sleep 1
  end
end

E com isso é só utilizar nos testes assim:

Given I follow "Salvar"
And I wait for ajax loading
Then ...

É isso!

Resolvendo problemas de input not found no Cucumber

No Cucumber podemos fazer testes que preenchem campos de texto, como abaixo:

When I fill "login" with "usuario"

Se o input não tiver um label associado a ele corretamente, o Cucumber não achará o campo e lançará um erro.

Para que um label esteja associado corretamente a um input, o atributo for do label deve ser o mesmo que o id do input, por exemplo:

 


Agora a parte legal, é que se quisermos testar se a associação entre o label e o input está correta, basta clicar no label e ver se o cursor se move para dentro do input, como abaixo:



No exemplo abaixo não deve funcionar pois a associação está errada:




Se esse teste não funcionar, provavelmente você terá problemas ao rodar o Cucumber.

Caso queira passar longe desse problema, evite criar códigos HTML na mão e utilize os helpers text_field e o label do Rails

E agora vou aproveitar para agradecer o Autor do post de como utilizar o Syntax Highlighting no Blogger

vlw!