A smarter way to run your tests

Soundcheck is a universal test runner. It automatically detects what testing frameworks you use, and how to run your tests. You can pass it a filename, and it'll run just those tests.

One benefit of this is that you can set your editor to simply run soundcheck $filename, and soundcheck will figure out how to run that test.

Soundcheck will also try to run your tests as fast as possible.

Usage

soundcheck
=> runs all tests it can find

soundcheck spec
=> runs rspec tests

soundcheck --fast spec
=> runs only rspec tests that don't require spec_helper

soundcheck spec/models/user_spec.rb
=> runs that specific test

How I use it with Vim

function! RunTests(filename)
" Write the file and run tests for the given filename
    :w
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo
    " For terminal Vim:
    exec ":!soundcheck " . a:filename

    " For graphical Vim:
    "call Send_to_Tmux("soundcheck " . a:filename . "\n")
endfunction

function! SetTestFile()
    " Set the spec file that tests will be run for.
    let t:grb_test_file=@%
endfunction

function! RunTestFile(...)
    if a:0
        let command_suffix = a:1
    else
        let command_suffix = ""
    endif

    " Run the tests for the previously-marked file.
    let in_test_file = match(expand("%"), '\(.feature\|_spec.rb\)$') != -1
    if in_test_file
        call SetTestFile()
    elseif !exists("t:grb_test_file")
        return
    end
    call RunTests(t:grb_test_file . command_suffix)
endfunction

function! RunNearestTest()
    let spec_line_number = line('.')
    call RunTestFile(":" . spec_line_number)
endfunction

map <leader>t :call RunTestFile()<cr>
map <leader>a :call RunTests('')<cr>

Is Soundcheck not working for your project?

Feel free to submit a pull request that adds only a fixture and RSpec testcase which describes the situation in which it fails. If you can fix it yourself, then great, but I'll happily accept patches that add more project styles which Soundcheck currently can't handle.

Contributing to Soundcheck

  • Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
  • Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
  • Fork the project
  • Start a feature/bugfix branch
  • Commit and push until you are happy with your contribution
  • Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
  • Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.

Copyright (c) 2011 Marten Veldthuis. See LICENSE.txt for further details.

This gem started as a Ruby version of Gary Bernhardt's 'script/test' from Destroy All Software's screencast number 10.