在zshell中获取pytest自动完成

彼得·多兰

这个问题可能更适合于超级用户-如果是这种情况,请告诉我,我将予以解决。

我使用zsh并经常从命令行运行pytest。一个非常普遍的情况是我需要运行特定的测试(或类的子测试)。

前者看起来像

pytest test/test_foo_file.py::test_foo_function

后者就像

pytest test/test_foo_file.py::FooClassTest::test_specific_functionality

写出整个确切的类和测试名称有点痛苦,对于某种形式的自动补全或模糊搜索来说似乎已经成熟了。我无法通过研究发现实现这一目标-有人有任何建议吗?

让我知道我是否可以以任何方式更加具体。

马蹄铁

免责声明:我不是zsh用户,但是此方法与bash补全的定制非常相似:

  1. 创建一个自定义完成文件,例如

    $ mkdir ~/.zsh-completions
    $ touch ~/.zsh-completions/_pytest
    
  2. 在里面~/.zsh-completions/_pytest,写完成功能:

    #compdef pytest
    
    _pytest_complete() {
        local curcontext="$curcontext" state line
        typeset -A opt_args
        compadd "$@" $( pytest --collect-only -q | head -n -2)
    }
    
    _pytest_complete "$@"
    
  3. 进行调整.zshrc以包括自定义补全,例如

    fpath=(~/.zsh-completions $fpath)
    autoload -U compinit
    compinit
    zstyle ':completion:*' menu select=2
    

重新启动外壳。现在,您应该在选项卡完成时获得单个测试选择:

在此处输入图片说明

这里的关键命令是

$ pytest --collect-only -q | head -n -2

它将在当前目录中收集测试,并列出准备好作为命令行参数传递的名称。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章