Самый простой способ проверить валидацию на объекте команды - это использовать GrailsUnitTestCase.mockForConstraintsTests
.Метод фиктивной проверки будет применен к вашему объекту команды, и вы можете просто вызвать validate()
, как если бы вы были вне теста.
Вот пример того, как вы можете написать свой модульный тест.Ограничение blank
не имеет смысла для дат, поэтому я изменил его на nullable: false
.
import grails.test.GrailsUnitTestCase
class RegisterUserCommandTests extends GrailsUnitTestCase {
RegisterUserCommand cmd
protected void setUp() {
super.setUp()
cmd = new RegisterUserCommand()
mockForConstraintsTests RegisterUserCommand, [cmd]
}
void testConstraintsNull() {
cmd.dateOfBirth = null
cmd.someService = [calculateAge: { dob -> 18 }]
def result = cmd.validate()
assert result == false
assert cmd.errors.getFieldErrors('dateOfBirth').code == ['nullable']
}
void testConstraintsCustom() {
cmd.dateOfBirth = new Date()
cmd.someService = [calculateAge: { dob -> 17 }]
def result = cmd.validate()
assert result == false
assert cmd.errors.getFieldErrors('dateOfBirth').code == ['validator.invalid']
}
}
Обратите внимание, что ваша служба не будет внедрена в модульном тесте (это ( в интеграционном тесте), поэтому вам нужно либо смоделировать его, как указано выше, либо создать экземпляр и назначить его cmd.someservice
.