在版本1.2中,Grails引入了全局约束.我尝试将以下内容添加到Config.groovy中
grails.gorm.default = {
constraints {
notBlank(nullable:false, blank:false)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的一个域类中使用它
static constraints = {
email(email: true, unique: true, shared: 'notBlank')
}
Run Code Online (Sandbox Code Playgroud)
但是当我使用空电子邮件地址保存用户时,没有报告错误,为什么?
谢谢,唐
我从来没有试图制定全局约束,但我可以告诉你,如果你想将一个字段标记为非空白而不是可空,则根本不需要创建新约束,只需将其添加到您的域类:
static constraints = {
email(blank:false)
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您在保存时遇到异常,则无法获得异常 - 您需要在调用save()或validate()之后测试该对象,如此域类中所示:
class Contact {
static constraints = {
name(blank:false)
}
String name
}
Run Code Online (Sandbox Code Playgroud)
和它的测试用例:
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"]
}
}
Run Code Online (Sandbox Code Playgroud)
如果您确实需要保存例外,可以在Config.groovy中添加此设置:
grails.gorm.save.failOnError = true
Run Code Online (Sandbox Code Playgroud)
我发现它在开发中非常有用.
HTH
PS
要使用您已定义的约束,您需要将其添加到您的域类:
static constraints = {
email(shared:"myConstraintName")
}
Run Code Online (Sandbox Code Playgroud)
但要注意,您不能像在内置的测试中那样测试单元测试中的约束,因为配置将不会被读取.
| 归档时间: |
|
| 查看次数: |
2238 次 |
| 最近记录: |