我有一个带有休息控制器的Grails 2.5.6项目,我在其中创建了n个异步任务,每个异步任务调用这样的服务中的方法:
// MyController
...
def statuses = ['where', 'ownership', 'store']
def tasks = statuses.collect { st ->
task {
return myService.invokeMethod(st, [aDomain, data])
}
}
def props = waitAll(tasks)
...
// MyService
...
store(aDomain, data) {
...
def store = Store.get(data.store)
...
}
如果我执行该应用程序,则可以在数据库中找到正确的商店。
我还创建了一个集成测试。为避免与数据库中的现有数据发生冲突,我在测试期间创建了一个新的Store
:
// Integration test (simplified)
....
def store = new Store(....)
store.save(flush: true)
...
def json = [store: store.id] as JSON
...
controller.request.content = params.toString()
controller.request.method = "POST"
controller.update()
...
如果我执行测试,则在服务中找不到创建的新商店,并且测试失败。 我已经在应用程序的某些方面验证了这种情况,并发现: - 如果我在控制器中搜索商店(执行任务之前或之后),则会找到它 - 如果我列出服务方法中的所有商店,则新商店不存在。
我认为这种行为是由于在测试期间如何处理hibernate会话但我不知道如何解决它。 欢迎提出任何建议。
由于
答案 0 :(得分:0)
尝试使用Synchronouse promise factory进行测试。
void setup() {
Promises.promiseFactory = new SynchronousPromiseFactory()
}