Skip to content

Instantly share code, notes, and snippets.

@heisters
Created December 30, 2009 20:08
Show Gist options
  • Save heisters/266351 to your computer and use it in GitHub Desktop.
Save heisters/266351 to your computer and use it in GitHub Desktop.
Run RSpec and Cucumber from vim, on the current spec/feature
" Vim functions to run RSpec and Cucumber on the current file and optionally on
" the spec/scenario under the cursor. Within the context of a Rails app, will
" prefer script/spec and script/cucumber over their system counterparts.
function! RailsScriptIfExists(name)
" Bundle exec
if isdirectory(".bundle") || (exists("b:rails_root") && isdirectory(b:rails_root . "/.bundle"))
return "bundle exec " . a:name
" Script directory
elseif exists("b:rails_root") && filereadable(b:rails_root . "/script/" . a:name)
return b:rails_root . "/script/" . a:name
" System Binary
else
return a:name
end
endfunction
function! RunSpec(args)
let spec = RailsScriptIfExists("rspec")
let cmd = spec . " " . a:args . " -fn -c " . @%
execute ":! echo " . cmd . " && " . cmd
endfunction
function! RunCucumber(args)
let cucumber = RailsScriptIfExists("cucumber")
let cmd = cucumber . " " . @% . a:args
execute ":! echo " . cmd . " && " . cmd
endfunction
function! RunTestFile(args)
if @% =~ "\.feature$"
call RunCucumber("" . a:args)
elseif @% =~ "\.rb$"
call RunSpec("" . a:args)
end
endfunction
function! RunTest(args)
if @% =~ "\.feature$"
call RunCucumber(":" . line('.') . a:args)
elseif @% =~ "\.rb$"
call RunSpec("-l " . line('.') . a:args)
end
endfunction
map !V :call RunTestFile("")
map !v :call RunTest("")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment