У меня есть контроллер, который использует объект команды в действии контроллера. При моделировании этого командного объекта в модульном тесте контроллера Grails метод hasErrors () всегда возвращает false, даже когда я намеренно нарушаю его ограничения. Еще более странно, что в производстве работает hasErrors ()! Так что это просто проблема тестирования.
def save = { RegistrationForm form ->
if(form.hasErrors()) {
// code block never gets executed
} else {
// code block always gets executed
}
}
В самом тесте я делаю это:
mockCommandObject(RegistrationForm)
def form = new RegistrationForm(emailAddress: "ken.bad@gmail",
password: "secret", confirmPassword: "wrong")
controller.save(form)
Я целенаправленно предоставляю ему неверный адрес электронной почты и проверяю, чтобы пароль и свойства verifyPassword были разными. В этом случае hasErrors () должен вернуть true ... но это не так. Я не знаю, насколько надежным может быть мой тест, если такая базовая вещь не работает: /
Вот класс RegistrationForm, чтобы вы могли видеть ограничения, которые я использую:
class RegistrationForm {
def springSecurityService
String emailAddress
String password
String confirmPassword
String getEncryptedPassword() {
springSecurityService.encodePassword(password)
}
static constraints = {
emailAddress(blank: false, email: true)
password(blank: false, minSize:4, maxSize: 10)
confirmPassword(blank: false, validator: { confirmPassword, form ->
confirmPassword == form.password
})
}
}