Вы не должны пытаться проверять promptui
, как ожидается, что его будет проверять его автор.
Что вы можете проверить:
- Вы отправляете правильные параметры при создании
promptui.Prompt
- Вы используете
promptui.Prompt
в своем коде - Вы правильно обрабатываете
promptui.Prompt
результаты
Как видите, все эти тесты неубедитесь, что promptui.Prompt
работает правильно внутри.
Тесты № 2 и № 3 могут быть объединены.Вам нужно запустить свой код для макета, и если вы получили правильный результат, вы можете верить, что оба # 2 и # 3 верны.
Создать макет:
type Runner interface {
Run() (int, string, error)
}
type promptMock struct {
// t is not required for this test, but it is would be helpful to assert input parameters if we have it in Run()
t *testing.T
}
func (p promptMock) Run() (int, string, error) {
// return expected result
return 1, "", nil
}
Вам понадобится отдельныймакет для тестирования потока ошибок.
Обновите ваш код, чтобы ввести макет:
func setEmail(runner Runner) string {
email, err := runner.Run()
if err != nil {
color.red("failed getting email")
os.exit(3)
}
return email
}
Теперь это тестируемый.
Создать функцию, которая создает prompt
:
func getRunner() promptui.Prompt {
return promptui.Prompt{Label: "Input your Email",
Validate: emailValidations,
}
}
Напишите простой тест утверждения, чтобы убедиться, что мы создаем правильную структуру.
Единственная непроверенная строка будет setEmail(getRunner())
, но она тривиальна и может охватываться другими типами тестов.