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 注释。

解决方法是删除注释并将保存域的逻辑放在单独的事务方法中。然后您将负责清理所有插入的数据。