Je n'ai jamais essayé de faire des contraintes globales, mais je peux vous dire que si vous voulez marquer un champ comme pas vide et non nullable vous n'avez pas besoin de créer une nouvelle contrainte du tout, il suffit d'ajouter ceci à votre classe de domaine:
static constraints = {
email(blank:false)
}
Bien sûr, si vous vous attendez à une exception, sauf vous n'obtenir un - vous devez tester l'objet après avoir appelé save() ou valider() comme démontré dans cette classe de domaine:
class Contact {
static constraints = {
name(blank:false)
}
String name
}
et son cas de test:
import grails.test.*
class ContactTests extends GrailsUnitTestCase {
protected void setUp() {
super.setUp()
}
protected void tearDown() {
super.tearDown()
}
void testNameConstraintNotNullable() {
mockDomain Contact
def contact = new Contact()
contact.save()
assertTrue contact.hasErrors()
assertEquals "nullable", contact.errors["name"]
}
}
Si vous ne souhaitez exceptions lors de l'enregistrement, vous pouvez ajouter ce paramètre dans votre Config.groovy:
grails.gorm.save.failOnError = true
Je l'ai trouvé tout à fait utile dans développement.
HTH
PS
Pour utiliser une contrainte que vous vous avez défini auriez besoin d'ajouter ceci à votre classe de domaine:
static constraints = {
email(shared:"myConstraintName")
}
Mais attention, vous ne pouvez pas tester la contrainte dans un test unitaire comme vous le feriez dans ceux intégrés car la config n'aura pas été lue.
Merci pour le conseil de ne pas être en mesure de tester les contraintes globales - ne le savais pas. BTW, pourquoi ne voudriez-vous pas que failOnError soit également activé? –
Je le garde désactivé de sorte que le comportement par défaut est d'échouer discrètement à un fichier journal plutôt que d'afficher une grosse trace de pile sur l'écran de l'utilisateur. Il y a d'autres façons d'y parvenir bien sûr et vous aurez probablement votre propre écran d'erreur 500 configuré de toute façon, donc je suppose que la réponse est la préférence personnelle. –