Как я могу протестировать функциональность валидации в провайдере терраформ
Я написал более сложную логику проверки для полей, которые мне нужно проверить в настраиваемом провайдере терраформ. Я, конечно, могу протестировать, что это модульные тесты, но этого недостаточно; зачем, если я действительно забыл применить валидатор?
Итак, мне действительно нужно использовать конфигурацию terraform и сделать так, чтобы провайдер делал это нормально, естественно.
В принципе, я ожидаю ошибки. Документация, кажется, указывает, что я должен выполнить сопоставление регулярного выражения на выходе. Но этого не может быть; кажется супер хрупким. Может кто подскажет, как это делается?
func TestValidation(t *testing.T) {
const userBasic = `
resource "my_user" "dude" {
name = "the.dude%d"
password = "Password1" // needs a special char to pass
email = "the.dude%d@domain.com"
groups = [ "readers" ]
}
`
rgx, _ := regexp.Compile("abc")
resource.UnitTest(t, resource.TestCase{
Providers: testAccProviders,
Steps: []resource.TestStep{
{
Config: userBasic,
ExpectError: rgx,
},
},
})
}
Этот код явно не работает. И многие исследования не дают ответов.
1 ответ
Начиная с версии 2.3.0 sdk вы можете установитьErrorCheck
функционировать на
resource.TestCase
чтобы обеспечить более сложную проверку ошибок.
Например:
resource.UnitTest(t, resource.TestCase{
Providers: testAccProviders,
ErrorCheck: func(err error) error {
if err == nil {
return errors.New("expected error but got none")
}
// your validation code here
// some simple example with string matching
if strings.Contains(err.Error(), "your expected error message blah") {
return nil
}
// return original error if no match
return err
},
Steps: []resource.TestStep{
{
Config: userBasic,
},
},
})