在vim或macvim中运行黄瓜测试

时间:2013-10-12 16:02:09

标签: ruby testing vim cucumber macvim

我刚刚开始使用VIM作为主编。到目前为止,我非常有趣地发现它提供的所有漂亮的小功能。我一直在寻找几天来从编辑器中运行我的黄瓜测试(如果可以运行特定场景则可以获得奖励)。我尝试过像vim-cucumber和vim-vroom这样的插件,但我似乎无法让事情发挥作用。注意:我在env.rb中做的事情就像运行“Rake”命令一样,这可能就是插件无法正常工作的原因。只是想知道是否有人在同一条船上有一个解决方案,任何帮助都会受到很大的赞赏。

由于 亚历

2 个答案:

答案 0 :(得分:2)

当我键入,t时,我设置了映射到我的光标下的rspec或黄瓜测试,当我输入,T时,我运行的整个文件就被运行了。如果我在不在rspec或黄瓜文件中时键入,t,那么我运行的最后一次测试将重新运行。这是我的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                                                                                           

答案 1 :(得分:1)

这可能会让一些人讨厌,但我想重新映射我的测试键以运行特定文件的规范。所以我将在我的会议中运行以下内容

:map ,t :w\|:!cucumber features/my_cucumber_feature.feature<cr>

这样我只能测试我正在做的事情而不必测试所有文件。我喜欢这种方法,因为我可以在项目的任何地方编辑任何文件,它仍然只运行我希望它运行的测试。基本上它说;保存我正在使用的任何文件并运行规范。如果我正在运行单元测试,我将其更改为:

:map ,t :w\|:!rspec spec/models/my_model_spec.rb<cr>

我喜欢快速反馈,所以我喜欢只运行与我的情况相关的测试,而不是整个套件。我将在最后运行整个套件,以确保我没有错过任何东西。