2010-06-12 21 views
34

我正在尋找一些測試vim腳本的工具。無論是VIM腳本測試vim插件的工具

  • 做單元/功能測試,或
  • 類的一些其他庫(如Python的unittest模塊),使人們方便地
    • 運行VIM與導致它做參數對其環境進行一些測試,並根據輸出確定是否通過給定測試。

我知道一對夫婦的vim腳本,做單元測試的,但他們那種隱約記錄,並可能會或可能不會實際有用:

vim-unit

  • 旨趣「爲用戶提供Vim腳本用一個簡單的單元測試框架和工具」
  • 第一個也是唯一的版本(V0.1)於2004年
  • 發佈
  • 文檔沒有提到它是否可靠地工作,除了聲明它是「從完成的票價[原文]」。

unit-test.vim

  • 這其中也似乎相當實驗性的,可能不是特別可靠。
  • 可能已經被放棄或背擱置:最後提交在2009 - 11年(> 6個月前)
  • 沒有標記的文件已創建從人(即沒有發佈)

所以誰的信息正在使用這兩個模塊中的一個,並且/或者鏈接到其他更清晰可用的選項非常受歡迎。

回答

3

我以前用過vim-unit。至少這意味着您不必編寫自己的AssertEqualsAssertTrue函數。它還具有一個很好的功能,通過將光標放在函數體內並鍵入:call VUAutoRun(),可以讓您運行當前函數(如果它以「Test」開頭)。

該文檔有點不完整,但如果您有其他XUnit測試庫的經驗,它不會對您不熟悉。

這兩個腳本都沒有檢查vim特定功能的方法 - 你不能更改緩衝區,然後檢查結果的期望 - 所以你將不得不以可測試的方式編寫你的vimscript。例如,將字符串傳遞到函數中,而不是將它們從函數內部的getline()拉出緩衝區,返回字符串而不是使用setline(),這種事情。

+0

是否支持配置vim啓動?例如,我可以指定只加載一個特定的插件嗎? – intuited 2010-06-13 22:00:29

+0

不是,但是如果這是個問題,你可以用--noplugin和-u來僞造。 – richq 2010-06-14 06:28:04

8

還有另一個(純VimL)UT plugin,我維護。

它被記錄下來,它帶有幾個例子,它也被我的其他插件使用。

它只針對測試函數結果,並在quickfix窗口中顯示失敗。異常調用堆棧也被解碼。 AFAIK,它是迄今爲止(或者至少第一個)填補quickfix窗口的唯一插件。從那以後,我添加了幫助腳本,用rspec生成測試結果(+ Vimrunner)

請注意,爲了測試緩衝區如何通過映射/片段/ ...進行更改,我建議使用其他插件。例如,我使用VimRunner + RSpec在Travis上測試我的C++片段(來自lh-cpp)。

關於語法,它看起來像這樣:

" Old way, to test boolean expressions 
Assert 1 > 2 
Assert 1 > 0 
Assert s:foo > s:Bar(g:var + 28)/strlen("foobar") 

AssertTxt! (s:foo > s:Bar(g:var+28), 
     \, s:foo." isn't bigger than s:Bar(".g:var."+28)") 

" New, recommended way to test relations 
AssertEquals('a', 'a') 
AssertDiffers('a', 'b') 
let dict = {} 
AssertIs(dict, dict) 
AssertMatch('abc', 'a') 
AssertRelation(1, '<', 2) 
AssertThrows 0 + [0] 
+1

yay文檔!謝謝,我會檢查一下。還注意到在那裏的鏈接部分列出了一些其他類似的工具。 – intuited 2010-06-14 13:12:32

+0

上述帖子中的鏈接不起作用。我認爲這(https://github.com/LucHermitte/vim-UT)是它應該去的地方。 – Forbesmyester 2016-02-25 10:40:54

+0

是的。我忘了在google代碼關閉後更新它。謝謝! – 2016-02-25 11:33:41

10

我結合使用Andrew Radev's VimrunnerRSpec到兩個測試Vim的插件獲得了成功,並設置它們持續集成服務器上。

簡而言之,Vimrunner使用Vim的客戶端 - 服務器功能來啓動Vim服務器,然後發送遠程命令,以便您可以檢查(並驗證)結果。這是一個Ruby的寶石,所以你至少需要熟悉Ruby,但如果你花時間在那裏,你將獲得RSpec的全部功能,以便編寫測試。

例如,一個名爲spec/runspec.vim_spec.rb

require "vimrunner" 
require "fileutils" 

describe "runspec.vim" do 
    before(:suite) do 
    VIM = Vimrunner.start_gui_vim 
    VIM.add_plugin(File.expand_path('../..', __FILE__), 'plugin/runspec.vim') 
    end 

    after(:all) do 
    VIM.kill 
    end 

    it "returns the current path if it ends in _test.rb" do 
    VIM.echo('runspec#SpecPath("foo_test.rb")').should == "foo_test.rb" 
    VIM.echo('runspec#SpecPath("bar/foo_test.rb")').should == "bar/foo_test.rb" 
    end 

    context "with a spec directory" do 
    before do 
     FileUtils.mkdir("spec") 
    end 

    after do 
     FileUtils.remove_entry_secure("spec") 
    end 

    it "finds a spec with the same name" do 
     FileUtils.touch("spec/foo_spec.rb") 
     VIM.echo('runspec#SpecPath("foo.rb")').should == "spec/foo_spec.rb" 
    end 
    end 
end 

如果您想了解更多的細節,我在"Testing Vim Plugins on Travis CI with RSpec and Vimrunner"長寫它。

14

vader.vim很簡單,很棒。它有沒有外部依賴(不需要ruby/rake),它是一個純vimscript插件。這裏是一個完全指定的測試:

Given (description of test): 
    foo bar baz 

Do (move around, insert some text): 
    2Wiab\<Enter>c 

Expect: 
    foo bar ab 
    cbaz 

如果你有測試文件打開,你可以像這樣運行:

:Vader % 

或者你可以指向的文件路徑:

:Vader ./test.vader 
+3

最重要的是,作者迅速回答了問題。 – 2014-09-07 13:07:43

0

另外幾個候選人:

VimBot - 與VimRunner類似,它是用Ruby編寫的並允許您遠程控制vim實例。構建用於單元測試框架RSpec。

VimDriver - 與VimBot相同,除了Python而不是Ruby(作爲VimBot的直接端口啓動),所以你可以使用Python的單元測試框架,如果你更熟悉它的話。

1

對於功能測試,有一個名爲vroom的工具。它有一些限制,可能需要幾秒到幾分鐘的時間才能完成一個好的規模項目的全面測試,但它有一個很好的文字測試/文檔格式,支持vim語法高亮顯示。

它用於測試codefmt插件和一些類似的項目。例如,您可以查看vroom/dir。

0

vim-vspec。 你的測試是用vimscript編寫的,你可以使用BDD風格編寫它們(描述,預期,...)

runtime! plugin/sandwich/function.vim 
describe 'Adding Quotes' 
    it 'should insert "" in an empty buffer' 
    put! = '' 
    call SmartQuotes("'") 

    Expect getline(1) == "''" 
    Expect col('.') == 2 
    end 
end 

GitHub的有鏈接到你開始視頻和文章獲得: