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!
FnZ,
ReplyDeleteWhat is all this about?
Dear Anonymous,
ReplyDeleteThis is all about becoming a better person by writing more code.
When you work with metal (brass, to pick a random example) you become a better metal worker by building your own tools from the metal you use.
When you work with code you become a better coder by building your own tools from the code you use.
that's all !!