Strict Standards: Non-static method themeGluedIdeas_Subtle::initOptions() should not be called statically in /home/riopro/www/blog.riopro.com.br/wp-content/themes/gluedideas_subtle/header.php on line 19
Riopro Blog - » Testes de integração usando webrat, rspec, authlogic e subdomain_fu

Testes de integração usando webrat, rspec, authlogic e subdomain_fu



Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Post de Reveillon, já que foi começado em 2009 e terminado em 2010. Bom ano a todos.

Esse post vai falar especificamente sobre como usar o Webrat + Rspec para aplicações usando o Authlogic e o subdomain_fu  para testes de integração. Por isso, não vamos mostrar todos os matchers existentes no Webrat. Apenas mostrar como fazemos para os testes rodarem.

Testes de integração sempre foram um Calcanhar de Aquiles para mim. Em parte porque as soluções existentes eram trabalhosas e em parte porque demoravam muito para rodar. Por exemplo, gosto muito do Cucumber, e acredito que suas descrições são muito boas para BDD. O problema do Cucumber é que ele, tal qual todas as formas de testes, é usado por humanos. E os testes que mostram que as features funcionam são tão fáceis de serem mal escritos ou escritos erradamente quanto qualquer outro teste. Com a diferença que ele acaba por acobertar mais facilmente os problemas existentes nesses testes. Por isso tenho restrições em implementá-lo.

Gosto muito do Selenium também, e acredito que em determinados momentos, o custo de performance (tempo para rodar os testes) pode ser justificado pelo fato dele realmente usar browsers para realizar os testes.  É muito provável que passemos a usar o Selenium em algum momento futuro aqui na Riopro.

Mas, por enquanto, preferimos adotar somente o excelente Webrat (sim, porque o Webrat pode ser fácilmente integrado ao Selenium e ao Cucumber). O que o Webrat faz é, em linhas gerais, executar uma chamada http real (usando o método visit) e tratar o output gerado com o Nokogiri (O Nokogiri é um parser no estilo Hpricot, rápido e com uma ótima navegação do DOM). Além disso, o Webrat provê matchers muito úteis.Nas nossas aplicações, via de regra, usamos o RSpec para testar. E integrar o RSpec com o Webrat é muito simples. O mais complicado (a única coisa complicada para falar a verdade) foi que os testes necessitavam passar pela autenticação do AuthLogic e ainda usar subdomínio (usando o padrão de mercado subdomain_fu).

Nota importante: toda descrição feita aqui terá por base a
versão 1.2.9 do Rspec e usará o novo diretório support para
armazenar as especificidades de configuração do Webrat e
do Authlogic.

Abaixo um exemplo de como seria um teste de integração simples. Supondo que queremos testar que o usuário está visitando a página de administração da sua conta. Extraí como configurar e um exemplo nesse gist abaixo:

As duas primeiras partes são de configuração (note o comentário mostrando o caminho e o nome completo do arquivo). Primeiro adiciono a gem ao environment de teste para não poluir o environment de produção com gems de teste.

Depois, configuramos o Webrat em si, em um arquivo support (que é carregado na inicialização do Rspec). Aí inserimos 2 métodos para suportar o subdomain_fu e o Authlogic. São eles o webrat_setup_real_account e o webrat_setup_real_user respectivamente. A documentação do Authlogic aconselha o uso do activate_authlogic para os testes (e é isso que usamos nos testes de controller). Mas, como o UserSession.create não funcionou e tive que apelar para mockar o find do UserSession (mas isso, seguramente, deve ser melhorado).

Por último, um exemplo de teste de integração simples. Nada muito complexo, só para mostrar o uso. A página do Webrat é mais  completa em termos de exemplo. O mais crítico foi fazer o subdomain_fu e o Authlogic responderem corretamente (e não me mandarem para a página de login como resposta). Outra coisa é que em testes de integração eu sempre uso fixtures :all. Isso porque, como a view tem que ser renderizada corretamente, o certo é que o banco de dados esteja todo carregado.

Uma vantagem de não usar o Selenium, é que conseguimos rodar os testes usando o Parallel Spec. Outra coisa é que, usando o Rspec, se você quiser usar apenas os testes de integração, então é só usar o comando:

$ rake spec:integration

É isso, simples assim. As maiores limitações são (como já dito) os testes de javascript propriamente dito. Mas nada impede de, por exemplo, usar o visit_url com um chamada em formato js para testar se o javascript de retorno está correto, além de testar a presença do javascript na página que deveria fazer a chamada Ajax.

Links Úteis:

Informações e Links

Junte-se comentando, lendo o que os outros dizem ou colocando um link a partir do seu blog.


Outros Artigos

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
authlogic e subdomain_fu: configurando corretamente o escopo

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Recuperando fotos de um cartão Sony usando o recoverjpeg no Linux

Comente

Tire um tempo para comentar e nos dizer o que você acha. Alguns códigos HTML são permitidos para formatação.

Comentários dos Leitores


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

We’re a group of volunteers and starting a brand new scheme in our community. Your website provided us with helpful information to work on. You’ve performed an impressive task and our whole community will be grateful to you.


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Nice blog here! Additionally your web site loads up very fast! What web host are you the use of? Can I am getting your associate hyperlink for your host? I want my site loaded up as fast as yours lol


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Aw, this was an exceptionally good post. Taking a few minutes and actual effort to generate a good article… but what can I say… I hesitate a lot and never manage to get anything done.


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

you are in reality a excellent webmaster. The web site loading pace is incredible. It sort of feels that you are doing any distinctive trick. In addition, The contents are masterpiece. you’ve done a fantastic job in this topic!


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Very good write-up. I absolutely love this site. Keep writing!