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 davi disse:
20 Nov 07, 12:32PM

Resolvido por aqui, Nando... :-)

Mais simples do que formatar um Windows:

> gem install ruby-snarl

Abraço

#11 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

#12 É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

#13 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

#14 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?

#15 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.

#16 Ricardo Pacheco disse:
14 Dez 11, 02:59PM

Olá nando,

Segui a risca o procedimento da página do projeto no github, só que aconteceu esse problema: http://pastie.org/3016769. Eu coloquei exatamente como é lá. O que pode ser?

Mac os X Lion 10.7.2
Growl 1.3 with growlnotify in /usr/local/bin/growlnotify

#17 Nando Vieira disse:
16 Dez 11, 01:25PM

Você adicionou a gem ao seu arquivo de Gemfile? Ao que me parece, ele não consegue carregar a gem. Se você não usa Bundler, certifique-se de ter instalado a gem. :)

Deixe um comentário





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.

jQuery: Dominando o framework

Você quer aprender a usar jQuery de verdade? Então chegou a hora! Neste workshop você verá como funciona este framework de JavaScript, entendendo todos os aspectos que fazem do jQuery uma das melhores ferramentas para desenvolvimento de interfaces.

Saiba mais Fechar

Conheça também o HOWTO