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

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:

5 opiniões sobre “Testes de integração usando webrat, rspec, authlogic e subdomain_fu”

  1. 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.

  2. 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

  3. 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!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *