# Bacon 0.9, a small RSpec clone

**URL:** <https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283>\
**Category:** Ruby\
**Created:** [January 7, 2008, 8:50pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283 "2008-01-07T20:50:31Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 8:50pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/1 "2008-01-07T20:50:31Z")

</div>

Hello,

Today I’m proud to release Bacon 0.9.

= Bacon – a small RSpec clone.

“Truth will sooner come out from error than from confusion.”  
—Francis Bacon

Bacon is a small RSpec clone weighing less than 300 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 [Index of /repos/taptap/](http://chneukirchen.org/repos/taptap/))

== Implemented assertions

- should. and should.be.
- 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 …]

== Object#should

You can use Object#should outside of contexts, where the result of  
assertion will be returned as a boolean. This is nice for  
demonstrations, quick checks and doctest tests.

```
>> require 'bacon'
>> (1 + 1).should.equal 2
=> true
>> (6*9).should.equal 42
=> false

```

== Where can I get it?

You can download Bacon 0.2 at

```
    http://chneukirchen.org/releases/bacon-0.9.0.tar.gz
            http://rubyforge.org/projects/testspec

```

Alternatively, you can checkout from the development repository with:

```
       darcs get http://chneukirchen.org/repos/bacon

```

(Patches using “darcs send” 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

```

== Contact

Please mail bugs, suggestions and patches to  
[mailto:removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid).

Darcs repository (“darcs send” is welcome for patches):  
[http://chneukirchen.org/repos/bacon](http://chneukirchen.org/repos/bacon)

== Copying

Copyright (C) 2007, 2008 Christian N.  
\<[InfoPage of Leah Neukirchen -- leah2](http://purl.org/net/chneukirchen)\>

Bacon is freely distributable under the terms of an MIT-style license.  
See COPYING or [The MIT License – Open Source Initiative](http://www.opensource.org/licenses/mit-license.php).

== Links

Behavior-Driven Development:: [http://behaviour-driven.org/](http://behaviour-driven.org/)  
RSpec:: [http://rspec.rubyforge.org/](http://rspec.rubyforge.org/)  
test/spec:: [http://test-spec.rubyforge.org/](http://test-spec.rubyforge.org/)

Christian N.:: [http://chneukirchen.org/](http://chneukirchen.org/)

Happy hacking and have a nice day,  
Christian N.

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 8:59pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/2 "2008-01-07T20:59:18Z")

</div>

Hi Chris,

On Jan 8, 2008 1:20 AM, Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> nevertheless providing all essential features.  
> it ‘should be empty’ do  
> lambda { @ary.fetch 0 }.
> 
> ```
> end
> - should have super powers [FAILED]
> $ bacon -q whirlwind.rb
> $ bacon -p whirlwind.rb
> 1..6
> 
> => false
> darcs get http://chneukirchen.org/repos/bacon
> 
> ```
> 
> at my site:
> 
> ```
> gem install bacon --source http://chneukirchen.org/releases/gems
> 
> ```

Is it compatible with Test::Unit like Test/Spec ?

–  
Let them talk of their oriental summer climes of everlasting  
conservatories; give me the privilege of making my own summer with my  
own coals.

[http://gnufied.org](http://gnufied.org)

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 9:24pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/3 "2008-01-07T21:24:35Z")

</div>

On Jan 7, 2008 2:50 PM, Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> nevertheless providing all essential features.  
> it ‘should be empty’ do  
> lambda { @ary.fetch 0 }.
> 
> ```
> end
> - should have super powers [FAILED]
> $ bacon -q whirlwind.rb
> $ bacon -p whirlwind.rb
> 1..6
> 
> => false
> darcs get http://chneukirchen.org/repos/bacon
> 
> ```
> 
> at my site:
> 
> RSpec:: [http://rspec.rubyforge.org/](http://rspec.rubyforge.org/)  
> test/spec:: [http://test-spec.rubyforge.org/](http://test-spec.rubyforge.org/)
> 
> Christian N.:: [http://chneukirchen.org/](http://chneukirchen.org/)

Is this a replacement for test/spec, or is test/spec bacon’s big  
brother?

- rob

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 9:50pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/4 "2008-01-07T21:50:34Z")

</div>

On 2008-01-07, Rob S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > Today I’m proud to release Bacon 0.9.
> > 
> > = Bacon – a small RSpec clone.
> > 
> > Bacon is a small RSpec clone weighing less than 300 LoC but  
> > nevertheless providing all essential features.
> 
> Is this a replacement for test/spec, or is test/spec bacon’s big brother?

It is not a replacement for test/spec, but a reimplementation of the  
ideas behind it in a compact way.

It does not use Test::Unit.

It is not completely compatible to test/spec or RSpec, but suites are  
reasonably easy to port.

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 10:01pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/5 "2008-01-07T22:01:43Z")

</div>

It’s unfortunate you didn’t name contexts strips and examples bits.  
You really could’ve played up this bacon thing. 🙂

I like the way this looks. It plays nice with some specs I was working  
on.

–Jeremy

On Jan 7, 2008 3:50 PM, Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> It is not a replacement for test/spec, but a reimplementation of the  
> ideas behind it in a compact way.
> 
> It does not use Test::Unit.
> 
> It is not completely compatible to test/spec or RSpec, but suites are  
> reasonably easy to port.
> 
> > - rob

–  
[http://www.jeremymcanally.com/](http://www.jeremymcanally.com/)

My books:  
Ruby in Practice

> **[Ruby in Practice](https://www.manning.com/books/ruby-in-practice)**
>
> Like Ruby itself, Ruby in Practice will make you more productive. The book shows you practical techniques and strategies for small projects and large-scale environments. A cookbook-style reference, it gives you concrete examples of systems...

My free Ruby e-book

> **[Site not found · DreamHost](http://www.humblelittlerubybook.com/)**
>
> The owner of this domain has not yet uploaded their website.

My blogs:

> **[Site not found · DreamHost](http://www.mrneighborly.com/)**
>
> The owner of this domain has not yet uploaded their website.

[http://www.rubyinpractice.com/](http://www.rubyinpractice.com/)

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 10:46pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/6 "2008-01-07T22:46:27Z")

</div>

Christian N. wrote:

> On 2008-01-07, Jeremy McAnally [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:
> 
> > It’s unfortunate you didn’t name contexts strips and examples bits.  
> > You really could’ve played up this bacon thing. 🙂
> 
> 😃  
> Lovely idea.

mmmm, chunky!

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 10:51pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/7 "2008-01-07T22:51:44Z")

</div>

Thanks for finally gemming it up! I just started writing the specs for  
Halcyon and was really distraught over using RSpec or Bacon. Very cool  
and very good timing.

Also, again, I think this is a very cool name considering its  
inspiration.

Cheers,  
Matt

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 10:16pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/8 "2008-01-07T22:16:27Z")

</div>

On 2008-01-07, Jeremy McAnally [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> It’s unfortunate you didn’t name contexts strips and examples bits.  
> You really could’ve played up this bacon thing. 🙂

😃  
Lovely idea.

> I like the way this looks. It plays nice with some specs I was working on.

Thank you.

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 11:23pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/9 "2008-01-07T23:23:22Z")

</div>

On Jan 7, 2008 3:50 PM, Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:

> It is not a replacement for test/spec, but a reimplementation of the  
> ideas behind it in a compact way.
> 
> It does not use Test::Unit.
> 
> It is not completely compatible to test/spec or RSpec, but suites are  
> reasonably easy to port.
> 
> > - rob

Neat…I checked out the code and it looks very nice and slim.

My only concern is converting our many thousands of lines of specs  
written in test/spec if bacon is where all the goodness is going to be  
happening =).

- Rob

> **[Home](https://robsanheim.com/)**
>
> Just another WordPress site

> **[Cognitect, a Nu Holdings, Ltd. Company](https://cognitect.com/)**

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 8, 2008, 12:25am UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/10 "2008-01-08T00:25:57Z")

</div>

> Okay, time to admit that quote was not _really_ the inspiration… 🙂
> 
> Bacon in German is Speck, which is written and sounds like spec.

That makes it even better! 😃

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 8, 2008, 11:37am UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/11 "2008-01-08T11:37:00Z")

</div>

On 2008-01-07, Rob S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Neat…I checked out the code and it looks very nice and slim.
> 
> My only concern is converting our many thousands of lines of specs  
> written in test/spec if bacon is where all the goodness is going to be  
> happening =).

test/spec has a bigger userbase already, and I try to keep bacon  
rather small. (Still, it has everything you need, really.)

IMO, a stable spec API is more useful than a featureful, but always  
moving one.

I’ll make test/spec bacon compatible in the long term, not the other  
way round. (That is, bacon-the-API will be really stable, so you can  
run your specs with test/spec, bacon or taptap (to be released).)

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 7, 2008, 11:16pm UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/12 "2008-01-07T23:16:19Z")

</div>

On 2008-01-07, Matt T. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Thanks for finally gemming it up! I just started writing the specs for  
> Halcyon and was really distraught over using RSpec or Bacon. Very cool  
> and very good timing.
> 
> Also, again, I think this is a very cool name considering its inspiration.

Okay, time to admit that quote was not _really_ the inspiration… 🙂

Bacon in German is Speck, which is written and sounds like spec.

---

<div class="post-metadata">

**Author:** ![cneuhaus](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/34f0e0/32.png) [@cneuhaus](https://www.ruby-forum.com/u/cneuhaus)\
**Post date:** [January 8, 2008, 11:56am UTC](https://www.ruby-forum.com/t/bacon-0-9-a-small-rspec-clone/125283/13 "2008-01-08T11:56:21Z")

</div>

On Jan 8, 2008 4:50 AM, Christian N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
wrote:  
[snip]

> Happy hacking and have a nice day,

Thanks a lot, bacon rocks!

^ manveru
