3

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

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

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

class MyServiceIntegrationSpec extends IntegrationSpec {
  def myService
  ...
}

我总是得到错误:

创建名为“myService”的 bean 时出错:范围“会话”对于当前线程不活动;如果您打算从单例中引用它,请考虑为该 bean 定义一个作用域代理;

我究竟做错了什么?

4

1 回答 1

1

您不能将“较低”范围的 bean 注入单例中。就像您想将控制器注入服务一样。控制器是随每个请求创建的,但服务是应用程序的一个(如果默认为单例)。在这里您可以有不同的会话,但只有一个单例用于测试 - 那么您想在测试中使用哪个会话的服务?

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

def grailsApplication

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

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

于 2013-01-28T09:11:50.647 回答