有没有办法测试 vim 插件的覆盖率?

Is there a way how to test coverage of a vim plugin?

我正在使用 vimrunner-python 库来测试我用 python 编写的带有 py-test 和 pytest-cov 的 vim 插件。

Vimrunner python 执行 vim 服务器并通过服务器远程接口控制客户端 vim 实例。

但是,pytest-cov(显然)看不到 vim 进程执行的行。有没有办法让这项工作生效,即将覆盖指向 vim 的服务器 PID?

您需要运行插件本身的覆盖率测量,即像这样:

# Start measuring coverage if in testing
if vim.vars.get('measure_coverage'):
    import os
    import atexit
    import coverage
    coverage_path = os.path.expanduser('~/coverage-data/.coverage.{0}'.format(os.getpid()))
    cov = coverage.coverage(data_file=coverage_path)
    cov.start()

    def save_coverage():
        cov.stop()
        cov.save()

    atexit.register(save_coverage)

如果插件被多次调用,您需要使用覆盖工具合并覆盖文件:

 $ cd ~/coverage-data
 $ coverage combine

这将生成合并的 .coverage 文件,然后可用于生成所需的报告。

注意:确保每个 vim 实例只执行一次测量部分,否则覆盖文件可能会被重写。在这种情况下,应使用除 PID 之外的另一个唯一性来源(即随机数)来生成 .coverage 文件的名称。