Ruby 在vim或macvim中运行cucumber测试

Ruby 在vim或macvim中运行cucumber测试,ruby,testing,vim,cucumber,macvim,Ruby,Testing,Vim,Cucumber,Macvim,我最近刚刚开始使用VIM作为我的主编辑器。到目前为止,我发现它提供的所有漂亮的小功能都非常有趣。几天来,我一直在寻找从编辑器中运行cumber测试的方法(如果它可以运行特定场景,这将是一个额外的好处)。我尝试过像vim cucumber和vim vroom这样的插件,但我似乎无法让它们正常工作。注意:我在env.rb中做一些事情,比如运行“Rake”命令,这可能是插件无法工作的原因。只是想知道是否有人也有过同样的经历,并且有解决办法,如果有人能提供帮助,我们将不胜感激 谢谢 Alex我设置了映射

我最近刚刚开始使用VIM作为我的主编辑器。到目前为止,我发现它提供的所有漂亮的小功能都非常有趣。几天来,我一直在寻找从编辑器中运行cumber测试的方法(如果它可以运行特定场景,这将是一个额外的好处)。我尝试过像vim cucumber和vim vroom这样的插件,但我似乎无法让它们正常工作。注意:我在env.rb中做一些事情,比如运行“Rake”命令,这可能是插件无法工作的原因。只是想知道是否有人也有过同样的经历,并且有解决办法,如果有人能提供帮助,我们将不胜感激

谢谢
Alex

我设置了映射,当我键入
时,t
运行光标下的rspec或cucumber测试,当我键入
时,t
运行我所在的整个文件。如果我在不在rspec或cucumber文件中时键入
,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                                                                                           
“设置引线
让mapleader=“,”
“运行测试
autocmd文件类型ruby、eruby、yaml、haml、scss、cucumber nmap t:call RunTestCommand(行('.'))
autocmd文件类型ruby、eruby、yaml、haml、scss、nmap T:call RunTestCommand()
功能!GetTestCommand()
如果展开('%:r')=~'\u spec$'
返回“bundle exec rspec”
elseif展开('%')=~'\.feature$'
返回“bundle exec cumber”
其他的
返回“0”
恩迪夫
端功能
功能!RunTestCommand(…)
让cmd=GetTestCommand()
“如果有命令,更新测试命令寄存器(t)
如果cmd!=“0”
让@t=':!'.cmd'.展开('%')。(a:0==1?:'.行('.):')
恩迪夫
“如果测试命令寄存器不为空,则将其排除。
如果strlen(@t)>0
执行@t
埃尔塞夫
Echorr“没有要运行的测试命令”
结束
端功能

这可能会让一些人恼火,但我喜欢重新映射测试密钥以运行特定文件的规范。因此,我将在会话中运行以下命令

:map ,t :w\|:!cucumber features/my_cucumber_feature.feature<cr>
:地图,t:w\|::!黄瓜特色/我的黄瓜特色
这样我就可以只测试我正在处理的内容,而不必测试所有文件。我喜欢这种方法,因为我可以在项目中的任何地方编辑任何文件,它仍然只运行我希望它运行的测试。基本上它说,;保存我所在的任何文件并运行规范。如果我正在运行单元测试,我会将其更改为:

:map ,t :w\|:!rspec spec/models/my_model_spec.rb<cr>
:地图,t:w\|::!rspec规格/型号/车型年款规格rb
我喜欢快速反馈,所以我只喜欢运行与我的情况相关的测试,而不是整个套件。最后我会把整个套房都整理好,以确保我没有遗漏任何东西