我有一个需要范围“会话”的服务。所以我只是使用
class MyService {
static scope = "session"
...
}
但在我的集成测试中,它没有正确接线:
class MyServiceIntegrationSpec extends IntegrationSpec {
def myService
...
}
我总是得到错误:
创建名为'myService'的bean时出错:当前线程的作用域'session'无效;考虑为这个bean定义一个范围代理,如果你打算从一个单独的引用它;
我做错了什么?
答案 0 :(得分:1)
你不能将'lower'scoped bean注入singleton。就像你想将控制器注入服务中一样。控制器是根据每个请求创建的,但服务是应用程序的一个(默认为单例)。在这里你可以有不同的会话,但只有一个单独的测试 - 所以你想在测试中使用哪个会话服务?
可以从上下文中获取bean而不是注入它:
def grailsApplication
void testSomething() {
given:
def myService = grailsApplication.mainContext.getBean('myService')
...
将测试范围从单例更改为会话也可以解决问题,但我不知道这是否可行。