Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
codebrawl entry - ruby testing libraries


a is a testing framework written in 6 lines of code (or 472 characters) which tries to be performant, with eye-catchy reports and easy to use.

Heavily inspired by Konstantin Haase's almost-sinatra, its long-term purpose is to become the fastest testing framework available.

The idea is to stay under 7 lines with less than 80 chars per line. There is room for optimization!


  • Setup / Teardown
  • Assertions (using the a method)
  • Report tests/assertions/failures
  • Keep track of lines where failures happened


Just clone this gist and run:

ruby example.rb

And voilà:



Copyright (c) 2011 Josep M. Bach. Released under the MIT license.

$;$f=[];$c=[];$a=0;class A;def a c;$a+=1;print c ?"\e[32m.\e[0m":($f\
<<caller[0];"\e[31mF\e[0m");end;def self.inherited(b);$c<<b;end;end;at_exit{$c\
.map{|t|;i.setup rescue nil;$t=t.instance_methods(false).map{|m|i.send\
m if !%w(setup teardown).include? m};i.teardown rescue nil};print "\n#{Time.\
now-$n} s.\n#{$t.size} tests, #{$a} assertions, #{$f.size} failures\n\n"+$f.\
map{|f|"\e[31mFailure\e[0m \e[97m@\e[33m #{f}"}.join("\n");exit -1 if $f[0]}
require 'a'
class MyTestCase < A
def setup
@user = { :some => :object }
def test_user_has_property
a @user[:some] == :object
a !@user[:other]
def test_user_not_nil
a !@user.nil?
class MyOtherTestCase < A
def setup
@foo = [1,2,3]
def test_user_has_property
a @foo.length == 3
a @foo[2] > 934 # Should fail at line 27
@foo[1] = 99
a @foo[1] != 2
def teardown
@user = nil

masylum commented Jul 6, 2011

That's a win!

jamesu commented Jul 15, 2011

Looks great! :)

Shouldn't the $t be an array? Like it


txus commented Jul 18, 2011

thanks, you're totally right! if you want you can do a pull request in the 'a' repo? (

Sure . I've sent it already (:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment