我最近才开始使用 VIM 作为我的主要编辑器。到目前为止,我发现它提供的所有不错的小功能都很有趣。我一直在寻找几天来从编辑器中运行我的黄瓜测试(如果它可以运行特定场景,这是一个奖励)。我尝试过 vim-cucumber 和 vim-vroom 之类的插件,但似乎无法正常工作。注意:我在 env.rb 中做一些事情,比如运行“Rake”命令,这可能是插件不起作用的原因。只是想知道是否有人在同一条船上并有解决方案,任何帮助将不胜感激。
谢谢亚历克斯
,t
当我在光标下键入 rspec 或 cucumber 测试时,我设置了映射,当我键入我,T
所在的整个文件时,我正在运行。如果我,t
不在 rspec 或 cucumber 文件中时键入,那么我运行的最后一个测试将重新运行。这是我的 vimrc 的相关部分。
" Set the leader
let mapleader = ","
" Run tests
autocmd FileType ruby,eruby,yaml,haml,scss,cucumber nmap <leader>t :call RunTestCommand(line('.'))<CR>
autocmd FileType ruby,eruby,yaml,haml,scss,cucumber nmap <leader>T :call RunTestCommand()<CR>
function! GetTestCommand()
if expand('%:r') =~ '_spec$'
return 'bundle exec rspec'
elseif expand('%') =~ '\.feature$'
return 'bundle exec cucumber'
else
return '0'
endif
endfunction
function! RunTestCommand(...)
let cmd = GetTestCommand()
" if there's a command update the test command register (t)
if cmd != '0'
let @t = ':!' . cmd . ' ' . expand('%') . (a:0 == 1 ? ':'.line('.') : '')
endif
" if the test command register isn't empty, excecute it.
if strlen(@t) > 0
execute @t
elseif
echoerr "No test command to run"
end
endfunction
这可能会让某些人感到烦恼,但我喜欢重新映射我的测试密钥以运行特定文件的规范。所以我将在我的会话中运行以下
:map ,t :w\|:!cucumber features/my_cucumber_feature.feature<cr>
这样我就可以只测试我正在处理的内容,而不必测试所有文件。我喜欢这种方法,因为我可以在项目中的任何位置编辑任何文件,并且它仍然只会运行我希望它运行的测试。基本上它说;保存我正在使用的任何文件并运行规范。如果我正在运行单元测试,我将其更改为:
:map ,t :w\|:!rspec spec/models/my_model_spec.rb<cr>
我喜欢快速反馈,所以我喜欢只运行与我的情况相关的测试,而不是整个套件。我将在最后运行整个套件,以确保我没有错过任何东西。