我有以下域名:
class Person {
String name
static constraints = {
name maxSize: 25, blank: false, nullable: false, unique: true
}
}
现在在这个域上我添加了一个集成测试:
class PersonIntegraionTest {
void testSavePersonUniqueConstraint() {
def person = //Loading data from xml
def node = person[1]
def person1 = ((Person) node.object)
personService.save(person1)
assertNotNull "Person id not present", person1.id
node = person[2]
def person2 = ((Person) node.object)
person2.name = person1.name
personService.save(person2)
assertTrue "Person2 have errors", person2.hasErrors()
}
}
运行此集成测试后,我收到以下错误:
Failure: |
testSavePersonUniqueConstraint(com.PersonIntegraionTest)
|
grails.validation.ValidationException: Validation Error(s) occurred during save():
- Field error in object 'com.Person' on field 'name': rejected value [Name2]; codes [com.Person.name.unique.error]
答案 0 :(得分:1)
在调试模式下运行:
Person.list()
看看到目前为止你得到了什么以及你想要保存什么。
看看你是否已经拥有与新款相同的东西。
答案 1 :(得分:0)
您已将该名称标记为必须是唯一的,因此您可能会运行测试插入名称,现在该名称仍在数据库中。然后再次运行测试失败。在测试运行之前,您的数据库可能尚未清除。你不是从一个已知的州开始的。
作为旁注,您可能想要检查名称字段在第二个断言中是否有错误:
assertTrue "Non-Unique names are not triggering errors", person2.hasErrors() && person2.errors.fieldErrors.name
这样你就知道你在名字字段上发现错误而不是其他错误。