我的grails应用程序中有一个要求是连接到现有的mongodb服务器。我正在使用插件':mongodb:3.0.3'来执行此操作。我有一个基本上为空的域类
class Thing {
static mapWith = "mongo"
String id
String name
static constraints = { }
static mapping = {
collection "myThing"
id column: '_id', generator: 'assigned'
version false
}
}
我正在尝试在集成测试中保存新的域对象 - 控制器操作的前身:
def "create the thing"() {
def thing = new Thing(name: "name", id:"foobar")
when:
def foo = thing.save(flush: true, failOnError:true)
then:
Thing.findByName("name")
}
测试失败,因为Thing.findByName返回null,但是,当我深入了解低级API时,我可以保存一个对象。以下测试通过:
def "create the thing low level"() {
when:
Thing.collection.insert([name:"name"])
then:
Thing.findByName("name")
}
我已经查看了其他stackoverflow问题,他们似乎在处理:
我做错了什么?如何让GORM保存工作,因为我想使用可用的grails工具。
注意:这不仅仅是一个测试问题,尝试使用GORM在控制器中保存内容也不起作用。调用此操作:
def save() {
def thing = new Thing()
thing.name = "foobar"
respond thing.save(failOnError: true, flush: true)
}
返回{ "class": "com.Thing", "id": null, "name": "foobar" }
,看看数据库告诉我它没有保存。
答案 0 :(得分:0)
您必须在集成测试的顶部添加此行,它应该开始保存。默认情况下,即使在IntegrationTests
中,GORM也不会保留static Boolean transactional = false
你的测试看起来像下面的那样,
class TestIntegrationSpec extends IntegrationSpec {
static Boolean transactional = false
def "my test"() {
...
}
...
}