Gnome and Autospec Notifications
I’m very keen on DBB with RSpec now and I wanted to share how I set up autospec notifications on Ubuntu (Jaunty 9.04) as long as the post I followed to do it is no longer available.
I’m using XCFE but should work perfectly on Gnome as well. This is an screenshot of what you’ll get in the end:

autospec notification XFCE/Gnome
First you need the ZenTest gem, you probably already do:
$ sudo gem install ZenTest $ sudo gem install redgreen
Then install the libnotify-bin package:
$ sudo apt-get install libnotify-bin
Here is the trick. Create a file called ~/.autotest with this:
#!/bin/ruby require 'redgreen' require 'autotest/timestamp' module Autotest::GnomeNotify def self.notify title, msg, img system "notify-send '#{title}' '#{msg}' -i #{img} -t 3000" end Autotest.add_hook :ran_command do |at| image_root = "~/.autotest_images" results = [at.results].flatten.join("\n") results.gsub!(/\\e\[\d+m/,'') output = results.slice(/(\d+)\sexamples?,\s(\d+)\sfailures?(,\s(\d+)\spending?|)/) full_sentence, green, failures, garbage, pending = $~.to_a.map(&:to_i) if output if failures > 0 notify "FAIL", "#{output}", "#{image_root}/fail.png" elsif pending > 0 notify "Pending", "#{output}", "#{image_root}/pending.png" else notify "Pass", "#{output}", "#{image_root}/pass.png" end end end end
As you can see I use the fail.png and pass.png images to show those cheesy smileys : ). You can download them here and copy them to ~/.autotest_images/.
Make your tests go green and have a beer! : )
Update: Added redgreen gem and changed “require redgreen” as Rodrigo Flores and rakk suggested. Thanks!
Update: Changed mistakenly escaped >. Thanks to Martin y Hunter for the comments.
Update: The script now supports pending examples. Thanks to Andy.
Update: Removed an extra end. Thanks to Andy again.
English
Español
bunwich
22 Feb, 2011
Another possible resolution when a bunch of warning messages appear:
in ~/autotest line 2, I commented out
#require ‘redgreen’
running autotest now works without having to type in bundle exec autotest
bytesource
20 Mar, 2011
I would like to second the statement made in the above comment:
After commenting out the line *require redgreen*
you are able to run the test by just typing *autotest* in the root of your project.
My system: Kubuntu 10.10
Metajunkie
30 Mar, 2011
I agree. Even though I did ‘gem install redgreen’ – I get a bunch of errors which seem to be telling me that it can’t find redgreen to load it. I tried changing the require line to include the version of redgreen which was loaded (redgreen-1.2.2) but still no joy. when I comment out the require redgreen line – it works.
togume
2 Apr, 2011
Same thing found on Ubuntu 10.10; commenting out the redgreen line makes it work.
Thanks for posting this!
theInstallation
3 Apr, 2011
Thanks for the post and the comments above! I commented require ‘redgreen’ and it worked on linux mint :) Thank you!
vikranth
21 Apr, 2011
commenting #require redgreen worked for me
vikranth
21 Apr, 2011
Thanks..
Wordell
27 Apr, 2011
Worked as is on Fedora 14 Gnome. Took out ‘require redgreen’ and worked also. Gracias.
Ken
23 May, 2011
This didn’t work on Ubuntu 11.04. I get the following error:
/home/egervari/.autotest:1: warning: regex literal in condition
/usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:311:in `load’: /home/egervari/.autotest:1: unknown regexp options – rby (SyntaxError)
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:311:in `block in initialize’
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:310:in `each’
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:310:in `initialize’
from /usr/local/lib/ruby/gems/1.9.1/gems/rspec-core-2.6.2/lib/autotest/rspec2.rb:11:in `initialize’
from /usr/local/lib/ruby/gems/1.9.1/gems/rspec-rails-2.6.0/lib/autotest/rails_rspec2.rb:31:in `initialize’
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:241:in `new’
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/lib/autotest.rb:241:in `run’
from /usr/local/lib/ruby/gems/1.9.1/gems/ZenTest-4.5.0/bin/autotest:6:in `’
from /usr/local/bin/autotest:19:in `load’
from /usr/local/bin/autotest:19:in `’
spinlock
9 Jun, 2011
I started getting the error:
uninitialized constant Test::Unit::UI::Console::Diff (NameError)
when I upgraded to ruby 1.9.2-p180 (Ubuntu 10.4). The solution was to make sure autotest knows to use the test-unit gem. I just added the following to my .autotest file:
#!/bin/ruby
gem ‘test-unit’
…
And now autotest is working again :)
Mike
6 Jul, 2011
I am a total noob in rails and am having trouble with getting the notifications to work, i installed the gems and placed the file in my home directory along with the images but how to i get the notifications to appear?
lost
8 Jul, 2011
I can only get autotest to run if I type /var/lib/gems/1.8/bin/autotest. I then runs but does nothing except tell me how long it has been waiting every time I save. Does not tell me anything else.
Mak
24 Jul, 2011
How do you set this up when you are using RVM.
loading autotest/rails_rspec2
/home/mak/.rvm/rubies/ruby-1.9.2-p290/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:54:in `require’: no such file to load — test/unit/ui/console/testrunner (LoadError)
Mak
24 Jul, 2011
Got this to work on ubuntu 11.04, rvm 1.6.24, by commenting out both require lines #2, and #3, but after the notification goes up the terminal does not return to the directory.
Andrew
5 Sep, 2011
Thanks a lot, this worked for me as well. Not sure if it’s needed, but right before I also installed the autotest-notification gem. Then, like Mak recommended(thanks!), I commented both lines #2 and #3 out. I’m on Ubuntu 11.04(with most recent updates), Ruby 1.9.2, using RVM, and Rails 3.1.
Patrick McElwee
20 Oct, 2011
This worked for me on Ubuntu 11.10, Ruby 1.8.7, using RVM, Rails 3.0.7. I never installed the redgreen gem, since it seemed to cause problems for most commenters.
Also, I was getting a ‘No such file’ gems/rspec-core-2.7.0/bin/rspec error. I had to run bundle install -binstubs in my app directory and copy the bin directory that it created into gems/rspec-core-2.7.0 … I believe that issue will be fixed with the next release of the rspec-core gem.
Thanks!
A. Zec
4 Jan, 2012
Thanks folks. This worked on openSUSE 11.3, after commenting out ‘redgreen’
AFajar
7 Jan, 2012
Thanks! Worked for me. Ubuntu 11.10.
Kamal Reddy
14 Jan, 2012
I love u People for the post and the comments
Thanks.
Christen Thompson
10 Feb, 2012
Thanks for posting this. I commented out require red green and it works on Linux Mint 12
zesaver
21 Feb, 2012
Hello and thanks for the good idea!
It worked well for me, especially in combination with spork gem. But for some reasons autotest, when there are some failures makes an great turn of red notifications, which could be coming up and up even 7-10 minutes after everything is OK in tests (terminal output).
For example, I have 3 failures and red notifications about it one after one. I fix all the failures and 10 minutes after it I do nothing and wath “3 failures” then “2 failures” then “1 failure” and finally “0 failures”. For now the solution for me was to add ‘system “sleep 5″‘ in after ‘system “notifu-send…”‘. But it is not the real solution. Where could be the problem, please?
Ubuntu 10.04 – rvm 1.10.2 – ruby 1.9.2p0 – rails 3.2.1
MhdSyrwan
9 Mar, 2012
Great work, put it on https://gist.github.com