我目前正在将一个(较大的)项目从Grails 2.2.4迁移到2.3.11。经过一些更改和插件升级后,我终于让应用程序运行了。但不幸的是,测试失败了(大多数)。
大多数测试失败,因为约束验证失败,尤其是唯一约束验证。我通过使用一个域类创建一个简单的应用程序来验证这一点相应的测试在2.2.4中通过,但在2.3.11中失败。这是我的域类:
class Car {
String brand
static constraints = {
brand unique: true
}
}
这是简单的测试(通过Grails 2.2.4):
@TestFor(Car)
class CarTests {
Car car = new Car("VW")
car.save()
car = new Car("VW")
Assert.assertFalse(car.validate())
}
如果我将测试更改为:
@TestFor(Car)
class CarTests {
Car car = new Car("VW")
car.save(flush: true) // added flushing
//Car.findAll() instead of flushing a findBy will do it
car = new Car("VW")
Assert.assertFalse(car.validate())
}
测试现在通过了!
看来,冲洗模式发生了变化,但我无法在Grails'中找到任何相关信息。发行说明。
有没有人遇到过同样的问题?有没有人有解释(和解决方案)?我真的很担心这个,因为这种行为对迁移的应用程序的代码库有很大的影响。