I'm testing parts of Shortcat (which as of v0.4.0 is in Objective-C) with RubyMotion, which is pretty nifty since I'm much more comfortable in Ruby than Objective-C and writing tests is way easier in Ruby. However, it's far from the fully-featured RSpec like I'm used to.
When working on a class, I like to only run specs for that particular file to keep the runtimes down, then run all the specs later. In RubyMotion, you can achieve this with:
$ rake spec files=foo_spec,spec/bar_spec.rb
However, I couldn't see any obvious way to run individual specs, which is useful when trying to focus on a particular spec. So I dug into the
/Library/RubyMotion/lib/motion/, which seems to be just a copy of MacBacon, and found this:
module Bacon ... RestrictName = // unless defined? RestrictName RestrictContext = // unless defined? RestrictContext Backtraces = true unless defined? Backtraces ...
After checking the
it function around line 503 (it may be different on yours), the name of the spec is regex matched against
RestrictName and if it matches, it runs the spec. Unfortunately,
RestrictContext isn't used yet but there's a
TODO for it there. I tried uncommenting the line, but it seems to just hang for me and given I don't really care for it, I haven't looked into it further.
I came up with a bit of code that lets you filter by spec name when running
rake spec. I also added support for
RestrictContext for when that gets implemented, as well as the ability to hide the backtrace. Place this in
$ rake spec filter="name of spec" # To filter by spec name $ rake spec files=foo_spec filter="name of spec" $ rake spec filter_context="this doesn't work yet" # To filter by context name (doesn't work until MacBacon implements it) $ rake spec hide_backtraces=yes # Hide backtraces
Hope this helps!