To try to learn a bit more about RSpec, I've decided to write an rspec file for checkr. I learn best by doing, and this seemed like a good way to do something worthwhile. Apologies in advance for any mangled terminology, I'm just getting started with this stuff. Please feel free to correct me in a comment. I'll update this post as appropriate.
I decided to start small. So I wrote a simple test script and used
the test2rspec tool to convert it.
class TestFoo < Test::Unit::TestCase
def test_bar
foo = Foo.new
assert_equal true, foo.bar
end
end
became
context "" do
specify "Bar" do
foo = Foo.new
foo.bar.should.equal true
end
end
The output changed a little bit too:
$ ruby test_foo.rb
Loaded suite test_foo
Started
.
Finished in 0.000646 seconds.
1 tests, 1 assertions, 0 failures, 0 errors
became
$ spec rspec_foo.rb
.
Finished in 0.000337 seconds
1 context, 1 specification, 0 failures
A useful bit of functionality is the ability to print more verbose output. It's not terribly interesting yet though, so let me play with the rspec file a bit before I show it to you.
In the first line of the rspec file, there's a pair of quotation
marks right after the context. These are a place holder for the
string I want to use to identify this context. On the next line,
"Bar" is given as an identifying string for the specification we're
working on (this all sounds like a spec not a test suite, doesn't it
-- it's intentional). Let's make these strings a bit more meaningful,
shall we:
context "Simple Case" do
specify "Bar is true" do
Now, when I do spec -v rspec_foo.rb, the output looks a little more meaningful:
Simple Case
- Bar is true
Finished in 0.00054 seconds
1 context, 1 specification, 0 failures
What will this look like when it fails? Let's add a failing
specification and find out:
specify "Bar is false" do
foo = Foo.new
foo.bar.should.equal false
end
Which generates output like this (slightly edited for the faint of heart):
Simple Case
- Bar is true
- Bar is false (FAILED - 1)
1)
should equal (Spec::Api::ExpectationNotMetError)
./rspec_foo.rb:12:in `Bar is false'
[most of a stack trace deleted]
Finished in 0.000943 seconds
1 context, 2 specifications, 1 failure
Well, raising an exception and having multiple lines of stacktrace thrown onto my terminal isn't really what I'd hoped for. I'm at the end of space for a blog post and time on the bus though, so I'll see about cleaning this up on tomorrow's ride home.
2 comments:
BDD has a lot to offer in terms of keeping what is good from the best TDD and dropping the linguistic baggage that makes TDD so hard to get right.
I think we should seriously consider changing checkr over to rspec completely.
With luck we'll get unit_diff and friends working with RSpec this weekend provided Steven Baker can make it down to mind camp.
Post a Comment