Кобра: как установить флаги программно в тестах

Я использую cobra создать CLI и хотеть моделировать команду, выполняемую с различными наборами параметров / флагов. Я пытался выяснить, как я могу использовать 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 ответ

Решение

Вы можете использовать (c *Command) SetArgs(a []string) Функция для этого. Тот факт, что некоторые из ваших аргументов являются целыми числами или логическими значениями, здесь не имеет значения - в конце концов, это то, что пользователь будет вводить в командной строке!

(c *Command) DebugFlags() Функция может быть использована при разработке теста, чтобы убедиться, что передаваемые флаги также правильно интерпретируются.

Мои интеграционные тесты с 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()

...
Другие вопросы по тегам