Splot

Tired of having to reconfigure how you run tests for each project? Annoyed that Minitest::Unit doesn't let you supply a line number? Want to press a single button in your text editor of choice, and run the test most relevant to the file you're editing? If you answered yes to any of these, then splot is for you.

Installation

Add this line to your application's Gemfile:

gem 'splot', require: false

And then execute:

$ bundle

Or install it yourself as:

$ gem install splot

Usage

First, play with splot on the command line. Jump into a project root directory. Want to run a test? Try this:

splot -f test/models/foo_test.rb

Do you use rspec? Nothing changes, except for the path to the file.

splot -f spec/models/foo_spec.rb

Want to run a test on a specific line? No problem:

splot -f test/models/foo_test.rb -l 44
splot -f spec/models/foo_spec.rb -l 44

When using Test::Unit, splot will automatically figure out the name of the test corresponding to the line number you give.

Now, you need a faster feedback loop, so you decide you want a preloader:

splot -f test/models/foo_test.rb -p zeus

That's about all there is to the command line!

Running relevant tests

Editing app/models/foo.rb? splot can figure out which test to run:

splot -f app/models/foo.rb

In this case, it'll look for a test at test/models/foo_test.rb or spec/models/foo_spec.rb. This way, you can shove whatever file you happen to be looking at in your text editor at splot and it will "just work."

vim-dispatch integration

I'm a huge fan of vim dispatch. Here's my .vimrc entries that bind <F5> to "run the test at the current cursor position" and <F6> to "run the whole test file," respectively:

:map <f5> :w <cr> :execute "Dispatch splot -p spring -f % -l " . ( line(".") + 1 )<cr>
:map <f6> :w <cr> :Dispatch splot -p spring -f %<cr>

Project configuration

If you have some specific project configuration, you can store arguments to splot as key value pairs (parsed by YAML) in a file called .splotrc in your project root. For example, if you want to tell splot to use zeus when running tests in this project:

echo "preloader: zeus" > .splotrc

Notes and planned features

  1. When invoking a Test::Unit test, splot defaults to using the rake test. This is to be compatible with preloaders like spring or zeus.
  2. There is cucumber support, too. I hope it works.
  3. I'm planning on adding git integration. Think "auto stage my changes if the tests pass."
  4. vim-dispatch seems to be unaware of when a test run passes, causing the "quickfix window" to stick around, even when there isn't a failure. I can potentially work around it in splot.
  5. I may write a small vim plugin to simplify the above dispatch mappings. It doesn't seem super necessary at this point, and I like to keep my plugin list small.
  6. More context specific handlers. For example, running splot on a .gemspec file should build the gem (if the tests all pass). Ideally, this would be extensible and not bundled in this gem.
  7. Auto detect preloaders (zeus/spring/etc).

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request