Grails 3.3 在集成测试期间调用多个异步 GORM,无需访问数据库。
Grails 3.3 Multiple Asynchronous GORM calls during integration test without access to the database.
当我意识到我无法访问存储在数据库中的值时,我正在使用多个异步 GORM 调用在 Grails 3.3 中编写集成测试。我写了下面的测试来了解发生了什么。
void "test something"() {
given:
def instance = new ExampleDomain(aStringField: "testval").save(flush:true)
when:
def promise = ExampleDomain.async.task {
ExampleDomain.get(instance.id).aStringField
}
then:
promise.get() == "testval"
}
我的域名class
class ExampleDomain implements AsyncEntity<ExampleDomain> {
String aStringField
static constraints = {}
}
build.gradle配置
compile "org.grails:grails-datastore-gorm-async:6.1.6.RELEASE"
知道出了什么问题吗?我希望在执行异步调用期间能够访问数据存储。
给定的块很可能在尚未提交的事务中。没有看到完整的测试 class 是不可能知道的,但是很可能你有 @Rollback
注释。
解决方法是删除注释并将保存域的逻辑放在单独的事务方法中。然后您将负责清理所有插入的数据。
当我意识到我无法访问存储在数据库中的值时,我正在使用多个异步 GORM 调用在 Grails 3.3 中编写集成测试。我写了下面的测试来了解发生了什么。
void "test something"() {
given:
def instance = new ExampleDomain(aStringField: "testval").save(flush:true)
when:
def promise = ExampleDomain.async.task {
ExampleDomain.get(instance.id).aStringField
}
then:
promise.get() == "testval"
}
我的域名class
class ExampleDomain implements AsyncEntity<ExampleDomain> {
String aStringField
static constraints = {}
}
build.gradle配置
compile "org.grails:grails-datastore-gorm-async:6.1.6.RELEASE"
知道出了什么问题吗?我希望在执行异步调用期间能够访问数据存储。
给定的块很可能在尚未提交的事务中。没有看到完整的测试 class 是不可能知道的,但是很可能你有 @Rollback
注释。
解决方法是删除注释并将保存域的逻辑放在单独的事务方法中。然后您将负责清理所有插入的数据。