Hello,
Today, after over 4 years, I'm proud to release Bacon 1.2.
* December 21th, 2012: Fourth public release 1.2.0.
* #satisfy will not pass arguments anymore to the block, use lexical
scope.
* Fixed Context#change?.
* Add support for finding specs named like spec/**/*_spec.rb.
* Contexts nest properly.
* Timer in TestUnitOutput.
* Nested output for SpecDoxOutput.
* Small cleanups and more tests.
= Bacon -- small RSpec clone.
"Truth will sooner come out from error than from confusion."
---Francis Bacon
Bacon is a small RSpec clone weighing less than 350 LoC but
nevertheless providing all essential features.
== Whirl-wind tour
require 'bacon'
describe 'A new array' do
before do
@ary = Array.new
end
it 'should be empty' do
@ary.should.be.empty
@ary.should.not.include 1
end
it 'should have zero size' do
@ary.size.should.equal 0
@ary.size.should.be.close 0.1, 0.5
end
it 'should raise on trying fetch any index' do
lambda { @ary.fetch 0 }.
should.raise(IndexError).
message.should.match(/out of array/)
# Alternatively:
should.raise(IndexError) { @ary.fetch 0 }
end
it 'should have an object identity' do
@ary.should.not.be.same_as Array.new
end
# Custom assertions are trivial to do, they are lambdas returning
a
# boolean vale:
palindrome = lambda { |obj| obj == obj.reverse }
it 'should be a palindrome' do
@ary.should.be.a palindrome
end
it 'should have super powers' do
should.flunk "no super powers found"
end
end
Now run it:
$ bacon whirlwind.rb
A new array
- should be empty
- should have zero size
- should raise on trying fetch any index
- should have an object identity
- should be a palindrome
- should have super powers [FAILED]
Bacon::Error: no super powers found
./whirlwind.rb:39: A new array - should have super powers
./whirlwind.rb:38
./whirlwind.rb:3
6 specifications (9 requirements), 1 failures, 0 errors
If you want shorter output, use the Test::Unit format:
$ bacon -q whirlwind.rb
.....F
Bacon::Error: no super powers found
./whirlwind.rb:39: A new array - should have super powers
./whirlwind.rb:38
./whirlwind.rb:3
6 tests, 9 assertions, 1 failures, 0 errors
It also supports TAP:
$ bacon -p whirlwind.rb
ok 1 - should be empty
ok 2 - should have zero size
ok 3 - should raise on trying fetch any index
ok 4 - should have an object identity
ok 5 - should be a palindrome
not ok 6 - should have super powers: FAILED
# Bacon::Error: no super powers found
# ./whirlwind.rb:39: A new array - should have super powers
# ./whirlwind.rb:38
# ./whirlwind.rb:3
1..6
# 6 tests, 9 assertions, 1 failures, 0 errors
$ bacon -p whirlwind.rb | taptap -q
Tests took 0.00 seconds.
FAILED tests 6
6) should have super powers: FAILED
Failed 1/6 tests, 83.33% okay.
(taptap is available from http://chneukirchen.org/repos/taptap/)
As of Bacon 1.1, it also supports Knock:
$ bacon -k whirlwind.rb
ok - should be empty
ok - should have zero size
ok - should raise on trying fetch any index
ok - should have an object identity
ok - should be a palindrome
not ok - should have super powers: FAILED
# Bacon::Error: no super powers found
# ./whirlwind.rb:39: A new array - should have super powers
# ./whirlwind.rb:38
# ./whirlwind.rb:3
$ bacon -k whirlwind.rb | kn-sum
6 tests, 1 failed (83.3333% succeeded)
(knock is available from http://github.com/chneukirchen/knock/)
== Implemented assertions
* should.<predicate> and should.be.<predicate>
* should.equal
* should.match
* should.be.identical_to / should.be.same_as
* should.raise(*exceptions) { }
* should.change { }
* should.throw(symbol) { }
* should.satisfy { |object| }
== Added core predicates
* Object#true?
* Object#false?
* Proc#change?
* Proc#raise?
* Proc#throw?
* Numeric#close?
[... for more documentation see README ...]
== Where can I get it?
You can download Bacon 1.2 at
http://chneukirchen.org/releases/bacon-1.2.0.tar.gz
http://rubyforge.org/projects/test-spec
Alternatively, you can checkout from the development repository at:
http://github.com/chneukirchen/bacon
(Patches rebased on HEAD are most welcome.)
== Installing with RubyGems
A Gem of Bacon is available. You can install it with:
gem install bacon
I also provide a local mirror of the gems (and development snapshots)
at my site:
gem install bacon --source http://chneukirchen.org/releases/gems
== Thanks to
* Michael Fellinger, for fixing Bacon for 1.9 and various improvements.
* Gabriele Renzi, for implementing Context#should.
* James Tucker, for the autotest support.
* Yossef Mendelssohn, for nested contexts.
* Gabriel Horner, for many patches.
* everyone contributing bug fixes.
== History
* January 7, 2008: First public release 0.9.
* July 6th, 2008: Second public release 1.0.
* Add Context#should as a shortcut for Context#it('should ' + _).
* describe now supports multiple arguments for better organization.
* Empty specifications are now erroneous.
* after-blocks run in the case of exceptions too.
* Autotest support.
* Bug fixes.
* November 30th, 2008: Third public release 1.1.
* Nested before/after.
* Add -Q/--no-backtraces to not show details about failed
specifications.
* Add Knock output.
* Bug fixes.
* December 21th, 2012: Fourth public release 1.2.0.
* #satisfy will not pass arguments anymore to the block, use lexical
scope.
* Fixed Context#change?.
* Add support for finding specs named like spec/**/*_spec.rb.
* Contexts nest properly.
* Timer in TestUnitOutput.
* Nested output for SpecDoxOutput.
* Small cleanups and more tests.
== Contact
Please mail bugs, suggestions and patches to
<mailto:chneukirchen@gmail.com>.
Git repository (patches rebased on HEAD are most welcome):
http://github.com/chneukirchen/bacon
git://github.com/chneukirchen/bacon.git
== Copying
Copyright (C) 2007, 2008, 2012 Christian Neukirchen
<purl.org/net/chneukirchen>
Bacon is freely distributable under the terms of an MIT-style license.
See COPYING or http://www.opensource.org/licenses/mit-license.php.
== Links
Behavior-Driven Development:: <http://behaviour-driven.org/>
RSpec:: <http://rspec.rubyforge.org/>
test/spec:: <http://test-spec.rubyforge.org/>
Christian Neukirchen:: <http://chneukirchen.org/>
Happy hacking and have a nice day,
Christian Neukirchen
on 2012-12-21 12:25
on 2012-12-21 22:16
On Dec 21, 2012, at 03:24 , Christian Neukirchen <chris+ruby-talk@vuxu.org> wrote: > Hello, > > Today, after over 4 years, I'm proud to release Bacon 1.2. Congratulations! > * December 21th, 2012: Fourth public release 1.2.0. > * #satisfy will not pass arguments anymore to the block, use lexical scope. > * Fixed Context#change?. > * Add support for finding specs named like spec/**/*_spec.rb. > * Contexts nest properly. > * Timer in TestUnitOutput. > * Nested output for SpecDoxOutput. > * Small cleanups and more tests. This looks fantastic. Damnit... and I was just about to announce minitest/bacon... I've almost passed all your tests. :P
Please log in before posting. Registration is free and takes only a minute.
Existing account
(Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
Log in with Google account | Log in with Yahoo account
No account? Register here.