My tests fail. Fortunately, they fail, otherwise I wouldn't be sure they were really working. Anyway, my full rspec suite is over 1600 examples now, and it takes about 90 seconds to run (including 20 seconds of overhead booting rails). After tweaking my code, I want to re-run only the failing tests, and I hate typing pathnames. Something I would also like to do, is re-run my specs but only a very narrow subset, without having to type in the entire path to the spec in question.
For example:
$ spk
......................................FFFF..F....FFF................................[etc]
/Users/conan/myproject/spec/controllers/admin/invoices_controller_spec.rb:96 Expected 'this', got 'that'
1 failed, etc etc
$ spk in/invoices_controller_s
spec/controllers/admin/invoices_controller_spec.rb
And the last line will run just the spec file that previously failed.
What's more, using rspec, I can easily choose a directory of specs to run, like this:
$ rspec spec/controllers/
but occasionally I would like to run only a specific subset of specs, for example invoice-related specs, because I've made big changes to my invoice class, and I want to check for ripples in neighbouring code:
$ rspec spec/controllers/admin/invoices_controller_spec.rb spec/models/invoice_spec.rb spec/views/admin/invoices/* spec/helpers/admin/invoices_helper_spec.rb
without having to type all that stuff.
In other words, I want to select a horizontal subset of my specs. For example, if I just want to run invoice-related specs:
$ spk invoice
spec/controllers/admin/invoices_controller_spec.rb
spec/models/invoice_spec.rb
spec/views/admin/invoices/index.html.haml_spec.rb
spec/views/admin/invoices/show.html.haml_spec.rb
spec/views/admin/invoices/_form.html.haml_spec.rb
spec/helpers/admin/invoices_helper_spec.rb
....................................................................................[etc]
The good news is: here's a wee script to do just that:
#!/bin/bash
if [ "$1" = "" ]
then
time rspec spec
else
SPK_FILES=`find spec -type f -name "*_spec.rb" | grep $1`
echo $SPK_FILES
time rspec $SPK_FILES --format documentation
fi
Call it "spk" or whatever you want, put it in your path, chmod it 755, and use it as indicated above.
Enjoy!