инструменты для тестирования плагинов vim - PullRequest
37 голосов
/ 12 июня 2010

Я ищу некоторые инструменты для тестирования скриптов vim. Либо сценарии vim, которые

  • сделать юнит / функциональное тестирование, или
  • классы для некоторой другой библиотеки (например, модуля Python unittest ), которая делает его удобным для
    • запустить vim с параметрами, которые заставляют его выполнять некоторые тесты в своей среде, и
    • определить по выходным данным, был ли данный тест пройден.

Мне известны несколько сценариев vim, которые выполняют модульное тестирование, но они довольно слабо документированы и могут или не могут быть полезны:

ВИМ-блок

  • подразумевает "Обеспечение скриптов vim простой структурой и инструментами модульного тестирования"
  • первая и единственная версия (v0.1) была выпущена в 2004 году
  • документация не упоминает, работает ли она надежно или нет, за исключением заявления о том, что это "тариф [sic] от завершения".

Блок-test.vim

  • Этот также кажется довольно экспериментальным и, возможно, не особенно надежным.
  • Может быть оставлено или отложено: последний коммит был в 2009-11 (> 6 месяцев назад)
  • Никаких помеченных ревизий не создано (т. Е. Нет выпусков)

Так что информация от людей, которые используют один из этих двух существующих модулей, и / или ссылки на другие, более понятные, опции, очень приветствуются.

Ответы [ 7 ]

15 голосов
/ 01 ноября 2013

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
11 голосов
/ 24 апреля 2012

Я успешно использовал Vimrunner Эндрю Радева в сочетании с RSpec для тестирования обоих плагинов Vim и их установки на сервере непрерывной интеграции.

InВкратце, 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

Я подробно писал об этом в «Проверка подключаемых модулей Vim на Travis CI с RSpec и Vimrunner» , если вам нужно больше подробностей.

8 голосов
/ 14 июня 2010

Есть еще один (чистый VimL) UT плагин , который я поддерживаю.

Это задокументировано, поставляется с несколькими примерами, а также используется другими моими плагинами.

Он предназначен только для проверки результатов функций и отображения сбоев в окне быстрого исправления. Исключительные вызовы также декодируются. AFAIK, пока это единственный плагин (или, по крайней мере, первый), который предназначен для заполнения окна быстрого исправления. С тех пор я добавил вспомогательные сценарии для получения результатов теста с помощью rspec (+ Vimrunner)

Обратите внимание, что для проверки того, как буфер изменяется с помощью отображений / фрагментов / ..., я рекомендую использовать другие плагины. Например, я тестирую свои фрагменты C ++ (из lh-cpp) на travis с VimRunner + RSpec.

Что касается синтаксиса, он выглядит следующим образом:

" 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]
3 голосов
/ 13 июня 2010

Я использовал vim-unit раньше.По крайней мере, это означает, что вам не нужно писать свои собственные функции AssertEquals и AssertTrue.Он также имеет приятную функцию, которая позволяет вам запускать текущую функцию, если она начинается с «Test», помещая курсор в тело функции и печатая :call VUAutoRun().

Документация немного сомнительна и незакончена, но если у вас есть опыт работы с другими библиотеками тестирования XUnit, он не будет вам незнаком.

Ни в одном из упомянутых сценариев нет способов проверить определенные функции vim - вы не можете изменить буферы и затем проверить ожиданияна результат - так что вам придется написать свой vimscript в тестируемом виде.Например, передавайте строки в функции, а не извлекайте их из буферов с getline() внутри самой функции, возвращайте строки вместо использования setline(), такого рода вещи.

0 голосов
/ 15 июня 2017

Существует 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 содержит ссылки на видео и статью, с которых можно начать.:

0 голосов
/ 11 февраля 2015

Для функционального тестирования есть инструмент под названием vroom . Он имеет некоторые ограничения и может проходить от нескольких секунд до нескольких минут, чтобы пройти тщательные тесты для проекта хорошего размера, но он имеет хороший грамотный формат тестирования / документации с поддержкой подсветки синтаксиса vim.

Используется для тестирования плагина codefmt и нескольких похожих проектов. Вы можете проверить vroom / dir там для примеров.

0 голосов
/ 07 сентября 2014

Еще несколько кандидатов:

VimBot - Аналогичен VimRunner в том, что он написан на Ruby и позволяет удаленно управлять экземпляром vim. Создан для использования с модулем модульного тестирования RSpec.

VimDriver - То же, что и VimBot, за исключением того, что выполняется в Python вместо Ruby (запускается как прямой порт из VimBot), поэтому вы можете использовать инфраструктуру модульного тестирования Python, если вам это более знакомо.

...