无法使用MongoDB GORM插件在集成测试中持久化实体

无法使用MongoDB GORM插件在集成测试中持久化实体,mongodb,grails,grails-plugin,gorm-mongodb,Mongodb,Grails,Grails Plugin,Gorm Mongodb,背景: 我创建了一个名为AppDomain的新插件,其中包括Mongo3.0.1插件。它有一个域类(Person)和一个集成测试(PersonSpec) 问题: 正在生成id。正在Mongo中创建appdomain数据库和人员集合。但是,集成测试在集合计数时失败 注: 在查阅了我能找到的所有文档并对生成的AppDomain插件代码进行了最低限度的更改之后,我不知道这里包含的持久性测试为什么会失败。我有一个类似的插件,使用junit测试配置Grails2.2.2,运行良好 感谢您的帮助 packa

背景: 我创建了一个名为AppDomain的新插件,其中包括Mongo3.0.1插件。它有一个域类(Person)和一个集成测试(PersonSpec)

问题: 正在生成id。正在Mongo中创建appdomain数据库和人员集合。但是,集成测试在集合计数时失败

注: 在查阅了我能找到的所有文档并对生成的AppDomain插件代码进行了最低限度的更改之后,我不知道这里包含的持久性测试为什么会失败。我有一个类似的插件,使用junit测试配置Grails2.2.2,运行良好

感谢您的帮助

package appdomain

class Person {
    String firstName
    String lastName
}
-


GORM并不总是在调用save后立即保存对象

save方法通知持久性上下文实例 应保存或更新。对象将不会被持久化 立即,除非使用flush参数

因此,您应该调用save立即刷新会话,以便更改立即生效

. . .
when: "the person is saved"
        aPerson.save(flush:true)
. . .
有时,由于验证或其他非常见错误,保存失败(即使提供了
flush:true
)!如果您想在这些情况下获得异常,还应该像这样添加
failOnError:true

. . .
when: "the person is saved"
        aPerson.save(flush:true, failOnError:true)
. . .

阅读页面中有关save方法的更多信息

当您使用findAll()或getAll()而不是list()时,是否会得到相同的结果?我会@ÖzgürEroğlu。findAll()和getAll()以相同的方式失败。就像Person.count()。@JasonStonebraker一样,也许您在配置测试环境中有一些不正确的DB选项?例如,您的数据库未创建且
dbCreate=“validate”
或不存在。我认为与mongo肯定存在类似的偏好。
. . .
when: "the person is saved"
        aPerson.save(flush:true, failOnError:true)
. . .