加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

单元测试 – 使用Vimrunner对Vim脚本本地函数进行单元测试

发布时间:2020-12-16 01:35:36 所属栏目:安全 来源:网络整理
导读:我正在使用 Vimrunner对Vim插件进行单元测试.一切正常,但我正在寻找一种更好/规范的方式来执行脚本本地功能.由于它们在脚本外部不能直接显示,因此我目前正在公开脚本的 SID并将其添加到我的调用中以运行它们. 我必须将此代码添加到我的插件中以公开SID: fun
我正在使用 Vimrunner对Vim插件进行单元测试.一切正常,但我正在寻找一种更好/规范的方式来执行脚本本地功能.由于它们在脚本外部不能直接显示,因此我目前正在公开脚本的< SID>并将其添加到我的调用中以运行它们.

我必须将此代码添加到我的插件中以公开SID:

function! s:SID()
  let fullname = expand("<sfile>")
  return matchstr(fullname,'<SNR>d+_')
endfunction
let g:my_plugin_SID = s:SID()

这将使SID暴露为例如< SNR> 18_.由于Vim函数都是全局函数,并且只是名称,因此可以通过在SID前面为脚本调用脚本本地函数:

:call <SNR>18_some_function()

然后我在一个规范中这样做:

describe "s:reverse_string" do
  let!(:sid) { VIM.command("echo g:my_plugin_SID") }

  def reverse_string(string)
    VIM.command("echo #{sid}reverse_string('#{string}')")
  end

  it "does something" do
    reverse_string("foo").should == "oof"
  end
end

有一个更好的方法吗?

最简单的方法是简单地公开脚本本地函数:将s:MyFunc转换为MyPlugin#MyFunc.毕竟,无论如何,功能可见性只能按惯例进行;除了繁琐的名称查找之外,没有任何东西可以防止调用脚本本地函数.

有时,我偏离了这一点,并希望从测试中调用脚本本地函数.我的方法与您的方法非常相似,但不是暴露< SID>从插件中,我编写了帮助函数来解析< SID>来自:scriptnames输出.它更慢(我不在乎;我的测试是集成测试),但我不必用测试代码污染插件本身.这是一个显示Sid()和SidInvoke()助手的示例:

let s:SID = Sid('autoload/EditSimilar/Substitute.vim')
function! s:Is( input,expected,description )
    let l:got = SidInvoke(s:SID,printf("IsWildcardPathPattern('%s')",a:input))
    call vimtap#Is(l:got,a:expected,a:description)
endfunction

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读