Verificando atributos dos elementos da página com Webrat
Algumas vezes você vai precisar verificar os atributos dos elementos html de uma página da sua aplicação com Cucumber + Webrat. Seria uma forma menos problemática de fazer testes de view, ao invés de usar o Rspec para isso (eu definitivamente não testo views com o Rspec e não aconselho ninguém a fazê-lo).
O Webrat é capaz de localizar seus elementos na view das seguintes formas: a partir de seu id, a partir do valor de atributo name, por uma string xpath ou pelo label que indica o elemento na página. Eu gosto bastante de usar a última opção, pois torna os testes mais legíveis. Quando este elemento é encontrado na página, o Webrat o retornará e então poderemos fazer certas verificações sobre ele, incluindo analisar os valores de seus atributos.
Por exemplo, podemos verificar se um campo de um formulário está desabilitado (ou seja, se o atributo ‘disabled’ está presente)
Then /^the field "([^\"]*)" should be disabled$/ do |label|
field_labeled(label).element.attribute('disabled').to_s.should == "disabled"
end
O método field_labeled encontra um elemento a partir de seu label. Sobre este elemento podemos verificar o hash attributes, o qual guarda o valor de todos os atributos presentes na tag html em questão.



Cássio,
muito bom seu post, ainda estou caminhando com o Cucumber e Webrat e dicas assim são super importantes.
Quanto aos testes de views com Rspec, porque você acha que não é bom utilizá-los?
Abraços.
Carlos.
Carlos A. da Silva
Julho 11, 2009 em 4:08 pm
Olá Carlos,
Eu não gosto de testar views com o Rspec porque neste tipo de teste não é necessário ir ao banco, uma vez que não é este o objetivo do teste, além de tornar os testes mais lentos sem necessidade. Assim, pra podermos testar precisamos utilizar mocks e/ou stubs muito intensamente e qualquer pequena alteração feita nas nossas views quebra os testes muito facilmente, ou seja, testes de view com Rspec são frágeis e de difícil manutenção.
cassiomarques
Julho 11, 2009 em 4:12 pm
Cássio,
muito interessante ter a certeza disto que você falou, tenho comprovado que realmente os testes de view são de difícil manutenção. Estou trabalhando num novo projeto a cerca de 1 mês e aproveitei para iniciar os testes de views com ele, visto que não usava essa parte antes com Rspec. E realmente os testes se tornam bastante quebradiços e fracos, como você comentou, por causa da necessidade de usar muitos mocks/stubs.
Vou analisar a possibilidade de remover essa parte de testes de views.
Valeu Cássio, obrigado.
Carlos A. da Silva
Julho 11, 2009 em 4:27 pm