2010-06-12 32 views
34

Tôi đang tìm một số công cụ để thử nghiệm các tập lệnh vim. Dù kịch bản vim rằngcông cụ để thử nghiệm các plugin vim

  • làm đơn vị/chức năng kiểm tra, hoặc
  • lớp dành cho một số thư viện khác (ví dụ unittest mô-đun Python) mà làm cho nó thuận tiện để
    • chạy vim với các thông số đó gây ra nó để làm một số thử nghiệm về môi trường của nó và
    • xác định từ đầu ra cho dù thử nghiệm đã cho có được thông qua hay không.

Tôi biết một vài kịch bản vim mà làm kiểm tra đơn vị, nhưng chúng loại mơ hồ ghi nhận và có thể hoặc có thể không thực sự có ích:

vim-unit:

  • mục đích "Để cung cấp các tập lệnh vim với khung kiểm tra đơn vị đơn giản và các công cụ"
  • phiên bản đầu tiên và duy nhất (v0.1) được phát hành vào năm 2004
  • Tài liệu
  • không đề cập đến việc liệu nó có hoạt động đáng tin cậy hay không, ngoài việc tuyên bố rằng nó là "giá vé [sic] từ kết thúc".

unit-test.vim:

  • Cái này cũng có vẻ khá thực nghiệm, và có thể không đặc biệt đáng tin cậy.
  • thể đã bị bỏ hoang hoặc back-hoãn: cuối cùng cam kết là trong 2009-11 (> 6 months ago)
  • Không tagged sửa đổi đã được tạo ra (tức là không có phiên bản)

Vì vậy, thông tin từ những người đang sử dụng một trong hai mô-đun tồn tại và/hoặc liên kết đến các tùy chọn khác, rõ ràng hơn có thể sử dụng được, rất được hoan nghênh.

Trả lời

3

Tôi đã sử dụng vim-unit trước đây. Ít nhất nó có nghĩa là bạn không phải viết các hàm AssertEqualsAssertTrue của riêng bạn. Nó cũng có một tính năng tuyệt vời cho phép bạn chạy hàm hiện tại, nếu nó bắt đầu bằng "Kiểm tra", bằng cách đặt con trỏ trong phần thân hàm và gõ :call VUAutoRun().

Tài liệu này hơi khó hiểu và chưa hoàn thành, nhưng nếu bạn có kinh nghiệm với các thư viện kiểm tra XUnit khác, nó sẽ không quen thuộc với bạn.

Không có kịch bản nào được đề cập có cách để kiểm tra các tính năng cụ thể vim - bạn không thể thay đổi bộ đệm và sau đó kiểm tra kỳ vọng về kết quả - vì vậy bạn sẽ phải viết vimscript của mình theo cách có thể kiểm tra. Ví dụ, chuyển chuỗi thành các hàm thay vì kéo chúng ra khỏi bộ đệm với getline() bên trong chính hàm đó, trả về các chuỗi thay vì sử dụng setline(), loại đó.

+0

Bất kỳ hỗ trợ nào để định cấu hình khởi động vim? Ví dụ: tôi có thể chỉ định rằng chỉ cần tải một plugin cụ thể không? – intuited

+0

Không, nhưng bạn luôn có thể giả mạo bằng --noplugin và -u nếu đó là vấn đề. – richq

8

Có một (VimL thuần túy) UT plugin mà tôi đang duy trì.

Nó được ghi lại, nó đi kèm với một số ví dụ và nó cũng được sử dụng bởi các plugin khác của tôi.

Nó chỉ nhằm mục đích thử nghiệm các kết quả chức năng và hiển thị các lỗi trong cửa sổ quickfix. Các callstacks ngoại lệ cũng được giải mã. AFAIK, nó là plugin duy nhất cho đến nay (hoặc ít nhất là đầu tiên) đó là có nghĩa là để điền vào các cửa sổ quickfix. Kể từ đó, tôi đã thêm tập lệnh trợ giúp để tạo kết quả thử nghiệm với rspec (+ Vimrunner)

Lưu ý rằng, để kiểm tra cách bộ đệm bị thay đổi với ánh xạ/đoạn mã/..., tôi khuyên bạn nên sử dụng các plugin khác . Ví dụ, tôi kiểm tra đoạn trích C++ của tôi (từ lh-cpp) trên travis với VimRunner + RSpec.

Về cú pháp, nó trông như thế này:

" 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

tài liệu yay! Cảm ơn, tôi sẽ kiểm tra điều này. Cũng nhận thấy rằng có một vài công cụ tương tự khác được liệt kê trong phần liên kết ở đó. – intuited

+0

Liên kết trong bài đăng trên không hoạt động. Tôi nghĩ rằng điều này (https://github.com/LucHermitte/vim-UT) là nơi mà nó nên đi. – Forbesmyester

+0

Có thực sự. Tôi quên cập nhật nó sau khi mã google tắt. Cảm ơn! –

10

Tôi đã thành công sử dụng Andrew Radev's Vimrunner kết hợp với RSpec cho cả hai thử nghiệm plugin Vim và đặt chúng lên trên một máy chủ tích hợp liên tục.

Tóm lại, Vimrunner sử dụng chức năng máy chủ-khách của Vim để kích hoạt máy chủ Vim và sau đó gửi lệnh từ xa để bạn có thể kiểm tra (và xác minh) kết quả. Đó là một viên ngọc Ruby vì vậy bạn sẽ cần ít nhất một số quen thuộc với Ruby nhưng nếu bạn dành thời gian thì bạn sẽ có được toàn bộ sức mạnh của RSpec để viết các bài kiểm tra của bạn.

Ví dụ, một tập tin gọi là 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 

Tôi đã viết về nó rất lâu trong "Testing Vim Plugins on Travis CI with RSpec and Vimrunner" nếu bạn muốn biết thêm chi tiết.

14

vader.vim rất dễ dàng, và đáng kinh ngạc. Nó có không có phụ thuộc bên ngoài (không yêu cầu ruby ​​/ cào), đó là một plugin vimscript thuần túy. Dưới đây là một thử nghiệm quy định đầy đủ:

Given (description of test): 
    foo bar baz 

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

Expect: 
    foo bar ab 
    cbaz 

Nếu bạn có các tập tin thử nghiệm mở, bạn có thể chạy nó như thế này:

:Vader % 

Hoặc bạn có thể trỏ đến đường dẫn tập tin:

:Vader ./test.vader 
+3

Trên hết, tác giả đã trả lời nhanh chóng các vấn đề. –

0

Một vài ứng cử viên khác:

VimBot - Tương tự như VimRunner ở chỗ nó được viết bằng Ruby và cho phép bạn điều khiển một cá thể vim từ xa. Được xây dựng để sử dụng với khung kiểm thử đơn vị RSpec.

VimDriver - Tương tự như VimBot ngoại trừ được thực hiện bằng Python thay vì Ruby (bắt đầu là cổng trực tiếp từ VimBot) để bạn có thể sử dụng khung kiểm thử đơn vị của Python nếu bạn quen thuộc hơn.

1

Đối với chức năng kiểm tra, có một công cụ gọi là vroom. Nó có một số hạn chế và có thể mất vài phút đến vài phút để có được thông qua các bài kiểm tra kỹ lưỡng cho một dự án có kích thước tốt, nhưng nó có một định dạng tài liệu/kiểm tra văn học tốt với hỗ trợ tô sáng cú pháp vim.

Nó được sử dụng để kiểm tra codefmt plugin và một vài dự án tương tự. Bạn có thể kiểm tra các vroom/dir có cho ví dụ.

0

vim-vspec. Các bài kiểm tra của bạn được viết bằng vimscript và bạn có thể viết chúng bằng cách sử dụng một kiểu BDD (mô tả, nó, mong đợi, ...)

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 

Các GitHub có liên kết đến một đoạn video và một bài báo để giúp bạn bắt đầu:

Các vấn đề liên quan