RSpecing a ‘binary’


#1

Hello, good folk of rspec-users.

I’m writing my first Ruby ‘binary’ (i.e., a script meant to be used
as a standalone system command) and I’m wondering how to RSpec it.

(Caveat: With all of my other code I almost alwyas do BDD, but as this
was my first ‘binary’ and these were my first Trollop steps, I ended up
writing the code first.)

‘From inside’? This means turning most of the script into one (or few)
callable method(s) and then testing them; the idea of accomodating the
code to be easier to test seems to miss the point, though.

‘From outside’ (i.e., run it with Kernel#` and observe output and
side-effects)? This feels more like behaviour testing, and I’m leaning
towards it, but I have a gut feeling there might be another choice that
I’m missing…

– Shot


#2

On Oct 25, 2008, at 8:08 am, Shot (Piotr S.) wrote:

‘From outside’ (i.e., run it with Kernel#` and observe output and
side-effects)? This feels more like behaviour testing, and I’m leaning
towards it, but I have a gut feeling there might be another choice
that
I’m missing…

Hi Shot

When I’ve written command-line tools, I’ve done exactly this. Use
Dir.tmpdir to give you a working space to hold any input/output files,
and call it with Kernel#` to capture its STDOUT.

Doing it this way proves your binary command works, because RSpec (or
Cucumber, which may be more appropriate here) is doing nothing you
can’t do in a shell yourself.

Ashley


http://www.patchspace.co.uk/


#3

Ashley M.:

When I’ve written command-line tools, I’ve done exactly this. Use
Dir.tmpdir to give you a working space to hold any input/output files,
and call it with Kernel#` to capture its STDOUT.

Thanks a lot, Ashley! This is what I’m going to do, then. :slight_smile:

I’ve just finished watching Rick B.’s ‘flog << Test.new’
presentation¹ from Ruby Hoedown 2008, and the first part (past
the introduction) is about how he RSpeced the flog binary – also
most informative!

¹
http://rubyhoedown2008.confreaks.com/11-rick-bradley-flog-test-new.html

– Shot