Test Notifier gem para Ruby

11 de Outubro de 2007

Uma vez que você começa a escrever testes, você não para mais. Mas conforme a quantidade de testes vai crescendo, o tempo para executá-las aumenta e esperar os resultados se torna uma tarefa chata. Para quem utiliza o Mac OS X, existem alguns plugins que permitem exibir os resultados em uma notificação do Growl. A primeira vez que usei, percebi que ia ter que escrever algo para quando em estivesse no Linux, ou mesmo no Windows (é, eu tenho que usar Windows às vezes). É uma excelente maneira de utilizar o Autotest.

Foi daí que surgiu este gem. Basta instalá-lo e toda vez que os testes forem executados, uma notificação irá aparecer. Funciona em qualquer lugar que você utilizar Test::Unit. Além disso, funciona nos 3 sistemas operacionais que, eventualmente, uso:

Instalação

A instalação é bastante simples. Faça o download do arquivo test_notifier.gem e instale-o com o comando gem install test_notifier. Depois, siga as instruções para o seu sistema operacional.

Ubuntu (Linux)

Instale o pacote "libnotify-bin" e suas dependências, caso existam. Basta executar o comando sudo aptitude install libnotify-bin

Mac OS X

Baixe o Growl e instale-o. Não esqueça de instalar o script "growlnotify", localizado no diretório "Extras" do instalador.

Windows

Baixe o Snarl e instale-o. Você também precisará instalar a gem do Snarl com o comando gem install ruby-snarl.

Agora, basta executar o comando abaixo para instalar o gem:

gem install test_notifier

A página do Test Notifier no Rubyforge é http://rubyforge.org/projects/testnotifier/. Lá você também pode fazer o download do gem para instalá-lo localmente.

Utilizando o Test Notifier

Para que as notificações funcionem, basta incluir o gem em seu código. Veja um exemplo de código Ruby:

require 'rubygems'
require 'test/unit'
require 'test_notifier'
 
class ExampleTest < Test::Unit::TestCase
  def test_should_pass
    assert true
  end
end

Veja como é exibida a notificação no Ubuntu:

Notificação exibida no Ubuntu quando todos os testes passam

Um teste que falhou seria exibindo assim no Windows:

Notificação exibida no Windows quando algum testa falha

No Mac OS X, a notificação pode ser exibida assim:

Notificação exibida no Mac OS X quando algum teste gera um erro

Gravei um screencast mostrando como instalar o gem no Ubuntu enquanto o projeto não é aprovado no Rubyforge. Para assistí-lo, baixe o arquivo test_notifier.ogg.

Utilizando o Test Notifier com Ruby on Rails

O Test Notifier pode ser facilmente integrado ao seu aplicativo desenvolvido em Ruby on Rails. Basta que você adicione a chamada para a biblioteca no arquivo "test/test_helper.rb". Veja como seu arquivo pode ser:

ENV["RAILS_ENV"] = "test"
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
require 'test_help'
require 'test_notifier'
 
class Test::Unit::TestCase
  self.use_transactional_fixtures = true
  self.use_instantiated_fixtures  = false
end

Apenas adicionando require 'test_notifier', as notificações já serão exibidas. E automaticamente integradas com o Autotest, sem que você precise configurar nada.

Bugs

Caso encontre algum bug, envie um comentário.

Comentários #

#1 Anderson disse:
15 Out 07, 07:59PM

Excelente trabalho Nando, parabéns!

Abraços

#2 Rodrigo Tassinari disse:
16 Out 07, 05:01PM

Nando, excelente gem! Parabéns!

Uma sugestão para o futuro: alguma maneira de integrar o test_notifier ao autotest (da gem ZenTest), da mesma maneira que o redgreen é integrado ao autotest, isto é, via arquivo ~/.autotest.

Tentei um pequeno hack aqui, colocando isto: http://pastebin.com/f7c36006a no meu ~/.autotest. Funciona, porém apenas enquanto os teste passam. No primeiro failure ou error encontrado, o autotest "trava", reclamando assim: http://pastebin.com/f6fc43742

Aliás, acabei de perceber, ao usar o redgreen + o test_notifier, o texto mostrado na bolha de notificação é precedido por caracteres bizarros, que são usados para aplicar as cores no terminal. A bolha podia filtrar estes caracteres, isso deve ser mais fácil, vou tentar fazer aqui.

#3 Nando Vieira disse:
16 Out 07, 08:01PM

Rodrigo, para fazer a integração entre o Test Notifier e o Autotest, basta colocar "require 'test_notifier'" no arquivo test/test_helper.rb. Alternativamente, você pode fazer esta chamada no próprio .autotest. Além disso, eu utilizo o redgreen e não tenho nenhum problema em exibir as informações na notificação. Qual distro você está usando? Pode enviar um screenshot?

Quanto ao erro (No such file or directory -- rubygems), significa que você não tem o rubygems instalado (ou não instalado corretamente). Dê uma olhada neste post para saber o que fazer: http://simplesideias.com.br/rubygems-no-ubuntu-nao-funciona/

#4 Rodrigo Tassinari disse:
16 Out 07, 08:18PM

Nando, colocar "require 'test_notifier'" no arquivo test/test_helper.rb funciona, mas aí eu "poluo" o código fonte comitado no subversion com um require para uma gem que nem todos os programadores terão instalados em suas máquinas. Fazer a integração via ~/.autotest é muito melhor neste sentido.

Porém, colocar este mesmo require no ~/.autotest não funcionou. Nenhuma mensagem de erro, mas também nenhuma notificação mostrada. Só consegui fazer funcionar usando este hack mesmo: http://pastebin.com/f7c36006a, mas o problema do "No such file or directory" persite.

Veja que o problema em questão não é da minha instalação do rubygems (que está instalada como você recomenda), pois o autotest (com as notificações) roda normalmente, ATÉ que algum teste falhe ou dê erro. A partir daí, os testes subsequentes não rodam, e o erro de "No such file..." aparece.

Quanto aos caracteres estranhos no uso do redgreen + test_notifier, algo estranho acontece realmente: no meu notebook no trabalho os caracteres aparecem, mas aqui em casa roda tudo OK, como parece rodar para você. Ambos os computadores rodam Ubuntu 7.04, e as mesmas versões do Ruby, Rails, Rubygems, etc... Vou tentar descobrir alguma diferença entre eles amanhã (e um screenshot também).

#5 Nando Vieira disse:
19 Out 07, 09:56PM

Rodrigo, experimente atualizar para a última versão presente no Rubyforge: sudo gem update test_notifier

#6 Vargthon disse:
25 Out 07, 07:12PM

Cara não estou conseguindo usar o test_notifier ele simplesmente não aparece na
lista de aplicativos do growl, sabe algum provável motivo? (já instalei o growlnotifier)

#7 Nando Vieira disse:
01 Nov 07, 12:54AM

Vargthon, eu não tive esse problema nenhuma vez; testei em 3 macs diferentes. Pior que não tenho a menor idéia do que seja. :P

#8 davi vidal disse:
12 Nov 07, 11:05AM

Fala Nando!

Testei no meu Linux (Gentoo com KDE 3.5.7) e tudo está funcionando maravilhosamente bem! :-) Valeu!

Mas precisei usar o Windows hoje e instalei o Snarl e o test_notifier.
Tudo parecia bem até conseguir isso: http://pastebin.com/f45be6f79

Alguma idéia do que estou fazendo de errado?

#9 Nando Vieira disse:
13 Nov 07, 09:01AM

Davi, muito estranho este erro. Aparentemente, mesmo com a lib instalada, não está carregando o módulo necessário. Tenta executar este script: http://pastie.caboo.se/117306

#10 EAD disse:
14 Nov 07, 03:13PM

Gostei mto deste blog tem me ajudado mto!!
tá de parabéns mesmo

#11 davi disse:
20 Nov 07, 12:32PM

Resolvido por aqui, Nando... :-)

Mais simples do que formatar um Windows:

> gem install ruby-snarl

Abraço

#12 davi disse:
23 Nov 07, 04:09PM

Eu estava com um problema usando o Redgreen junto com o test_notifier. Bastou alterar uma linha no test_notifier.rb e tudo voltou a funcionar! :-)

Talvez tenha a ver com os caracteres estranhos comentados...

Abraço

#13 Éverton disse:
28 Fev 08, 03:39PM

Nando,

Utilizo seu plugin a algum tempo, anteriormente em Ubuntu, onde ele funcionava perfeitamente.
Agora migrei para Mac utilizando Leopard, mas o plugin parou de funcionar.

Dando uma olhada no código e analisando tudo, para funcionar no lugar de: require 'test_notifier' passei a utilizar: require 'test_notifier/unit_test', realmente teve esta mudança no plugin?

Estou utilizando:
- Leopard 10.5.1
- Rails 2.0.2
- Crowl 1.2.1

#14 Nando Vieira disse:
28 Fev 08, 04:16PM

Éverton, eu uso aqui no Mac sem problemas. Veja se você tem o growlnotify instalado.

$ which growlnotify
/usr/local/bin/growlnotify

#15 elomarns disse:
29 Fev 08, 01:11PM

Olá, Nando.

Antes de mais nada, parabéns pelo gem. Fui testá-lo no Windows XP e não consegui fazê-lo funcionar. Tenho o ZenTest, Snarl, ruby-snarl e o test_notifier instalados, sendo que o autotest no Rails está funcionando sem problema nenhum, só que ele não está usando o Snarl pra comunicar os resultados dos testes.

Fiz conforme as suas instruções, ou seja, coloquei o require 'test_notifier' no test/test_helper.rb(http://pastie.caboo.se/159340), e nada. Pra confirmar se o ruby-snarl estava mesmo instalado, eu ainda testei o script que você postou acima(http://pastie.caboo.se/117306), além de colocá-lo também no meu teste unitário, sendo que em ambos os casos o Snarl exibiu a mensagem.

Sendo assim, não faço idéia do que pode estar errado. Você teria alguma suspeita de que parte do processo está causando o problema?

#16 Marcos G. Zimmermann disse:
04 Mar 09, 11:22AM

Carra.. Parabéns pelo seu blog.. tenho aprendido muito com ele.

Funcionou tudo certinho.. só estava acontecendo um problema:
Tinha um probleminha no arquivo test_notifier.rb linha 36. Ele não conseguia encontrar a variável img.. ai eu mudei para image.. e funcionou certinho.

Antes:
system("growlnotify -n test_notifier --image #{img} -p 2 -m #{@result.to_s} #{title}")
Depois:
system("growlnotify -n test_notifier --image #{image} -p 2 -m #{@result.to_s} #{title}")

Obrigado.

Deixe um comentário




Este blog usa o Gravatar.


Não é aceito código HTML: adicione-o no pastie.org ou paste.milk-it.net e poste apenas o link.

Se este é seu primeiro comentário, ele terá que ser aprovado antes de ser exibido.