Code for Concinnity

Run single test with Spring in Rails 4.1

In the old days, you would run a single test with:

$ ruby -I test test/functional/my_controller_test.rb -n test_my_case

This is all good and well, but is painfully slow. Then there were brilliant people who created Spork, Zeus and Spring to speed up that process.

With version 4.1 Rails adopted Spring as the official preloader. Probably due to its pure Ruby nature. Unfortunately it is the only one of the pack that does not seem to support the single test usage.

After munging around I discovered a method that can be used for any preloader. By putting a script script/test.rb:

# script/test.rb
$: << Rails.root.join('test')
options = {} do |opts|
  opts.on('-n TEST_NAME') do |n|
    options[:test_name] = n
  opts.on('-e ENVIRONMENT') do |e|
    raise"Must run in test environment") if e != 'test'
test_files = ARGV.dup
if options[:test_name]
  ARGV << "-n" << options[:test_name]
test_files.each do |f|
  Dir[f].each do |f1|
    load f1

Usage is just like good old ruby -I test:

$ bin/rails r -e test script/test.rb test/controllers/my_controler_test.rb -n test_my_case
$ bin/rails r -e test script/test.rb test/controllers/**/*.rb

If that’s too long, you can just do something like alias rt=bin/rails r -e test script/test.rb in your shell’s rc

Published by kizzx2, on May 10th, 2014 at 1:16 pm. Filled under: UncategorizedNo Comments

No comments yet.

Leave a Reply