объект команды mocking в контроллере grails приводит к тому, что hasErrors () возвращает false независимо от того, что! Пожалуйста помоги - PullRequest
4 голосов
/ 27 мая 2010

У меня есть контроллер, который использует объект команды в действии контроллера. При моделировании этого командного объекта в модульном тесте контроллера 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
  })
 }
}

1 Ответ

1 голос
/ 27 мая 2010

Вы пробовали mockForConstraintsTests?

например. что-то вроде ...

void testSomething() {

    mockForConstraintsTests(RegistrationForm)

    def form = new RegistrationForm(emailAddress: "ken.bad@gmail", password: "secret", confirmPassword: "wrong")

    form.validate()

    assert 1 == form.errors.getErrorCount()
}

Попробуйте сначала протестировать объект команды RegistrationForm в его собственном модульном тесте. (получить некоторую уверенность, что это действительно работает)

Может быть, использование вышеуказанного в качестве основы вашего теста поможет!?!?

...