Кобра: как установить флаги программно в тестах
Я использую 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()
...