As our number of specs grow I started to miss the test:recent functionality, so I created a simple little rake task to make it work with RSpec. Drop this in lib/tasks, I called it spec_recent.rake.
require 'spec/rake/spectask' # Grab recently touched specs def recent_specs(touched_since) recent_specs = FileList['app/**/*.rb'].map do |path| if File.mtime(path) > touched_since spec = File.join('spec', File.dirname(path).split("/")[1..-1].join('/'), "#{File.basename(path, '.rb')}_spec.rb") spec if File.exists?(spec) end end.compact recent_specs += FileList['spec/**/*_spec.rb'].select do |path| File.mtime(path) > touched_since end.uniq end desc 'Run recent specs' Spec::Rake::SpecTask.new("spec:recent") do |t| t.spec_opts = ["--format","specdoc","--color"] t.spec_files = recent_specs(Time.now - 600) # 10 min. endthen you just type rake spec:recent and it will run recent specs (last 10 min). Currently it's just looking for spec files that have changed, or spec files that directly correlate to files that have changed in app. It's not perfect, it won't understand that app/models/foo.rb may have a spec in spec/models/foo_some_test_spec.rb , but it'll figure out subdirectories. So if app/controllers/admin/my_controller.rb is modified it will look for spec/controllers/admin/my_controller_spec.rb.
I submitted it to the RSpec rubyforge, so if anyone wants to improve on it, please do so!