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

问题描述 投票:0回答:1

我正在使用

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)
,它似乎也不起作用。

我在这里缺少一些简单的东西吗?

go testing command-line-interface go-cobra
1个回答
9
投票

您可以使用

(c *Command) SetArgs(a []string)
功能来实现此目的。事实上,你的一些参数是整数或布尔值在这里并不重要 - 毕竟,这就是用户将在命令行上输入的内容!

在开发测试时可以使用

(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()

...
© www.soinside.com 2019 - 2024. All rights reserved.