集成测试中的Grails Scoped服务

时间:2013-01-27 18:09:35

标签: grails scope integration-testing

我有一个需要范围“会话”的服务。所以我只是使用

class MyService {
  static scope = "session"
  ...
}

但在我的集成测试中,它没有正确接线:

class MyServiceIntegrationSpec extends IntegrationSpec {
  def myService
  ...
}

我总是得到错误:

  

创建名为'myService'的bean时出错:当前线程的作用域'session'无效;考虑为这个bean定义一个范围代理,如果你打算从一个单独的引用它;

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你不能将'lower'scoped bean注入singleton。就像你想将控制器注入服务中一样。控制器是根据每个请求创建的,但服务是应用程序的一个(默认为单例)。在这里你可以有不同的会话,但只有一个单独的测试 - 所以你想在测试中使用哪个会话服务?

可以从上下文中获取bean而不是注入它:

def grailsApplication

void testSomething() {
    given:
    def myService = grailsApplication.mainContext.getBean('myService')
...

将测试范围从单例更改为会话也可以解决问题,但我不知道这是否可行。