代码之家  ›  专栏  ›  技术社区  ›  sixty4bit

Cobra:如何在测试中以编程方式设置标志

  •  5
  • sixty4bit  · 技术社区  · 6 年前

    我正在使用 cobra 构建CLI并希望模拟使用不同选项/标志集运行的命令。我一直在尝试如何使用cobra API在测试中设置标志,但还没有真正做到这一点。

    我有这个:

    // NewFooCmd returns a cobra.Command fitted to print output to the buffer for easier testing.
    buf := &bytes.Buffer{}
    cmd := package.NewFooCmd(buf)
    
    cmd.Execute()
    
    // some validations on the content of buf
    

    到目前为止,我发现的最接近的事情是:

    cmd.Flags().Set(name string, value string)

    。。。但这似乎不对,因为虽然标志的名称都是字符串,但它们并不都将字符串作为值。而且,即使我有 int 标志和通行证 string(1)

    这里有什么简单的东西我遗漏了吗?

    1 回复  |  直到 6 年前
        1
  •  7
  •   laverya    6 年前

    您可以使用 (c *Command) SetArgs(a []string) function 为了这个。一些参数是整数或布尔值这一事实在这里并不重要——毕竟,这是用户将在命令行中输入的内容!

    这个 (c *Command) DebugFlags() function 可以在开发测试时使用,以确保您通过的标志也被正确解释。

    我使用Cobra进行的集成测试结果往往如下所示:

    ...
    
    cmd := cli.RootCmd()
    buf := new(bytes.Buffer)
    cmd.SetOutput(buf)
    cmd.SetArgs([]string{
        "--some-flag",
        fmt.Sprintf("--some-string=%s", value),
        fmt.Sprintf("--some-integer=%d", integer),
    })
    err := cmd.Execute()
    
    ...
    
    推荐文章