集成测试中的Grails作用域服务
我有一项服务需要范围“会话”。所以我就用集成测试中的Grails作用域服务,grails,scope,integration-testing,Grails,Scope,Integration Testing,我有一项服务需要范围“会话”。所以我就用 class MyService { static scope = "session" ... } 但在我的集成测试中,它没有正确连接: class MyServiceIntegrationSpec extends IntegrationSpec { def myService ... } 我总是会出错: 创建名为“myService”的bean时出错:作用域“session”对于当前线程不是活动的;如果您打算从单元引用这个bean,请
class MyService {
static scope = "session"
...
}
但在我的集成测试中,它没有正确连接:
class MyServiceIntegrationSpec extends IntegrationSpec {
def myService
...
}
我总是会出错:
创建名为“myService”的bean时出错:作用域“session”对于当前线程不是活动的;如果您打算从单元引用这个bean,请考虑为它定义一个作用域代理;p>
我做错了什么?您不能将“较低”范围的bean注入singleton。就像您希望将控制器注入服务一样。控制器随每个请求一起创建,但服务是应用程序的服务(如果默认为单例)。在这里,您可以有不同的会话,但只有一个用于测试的单例,所以您希望在测试中使用哪个会话的服务 可以从上下文中获取bean,而不是注入它:
def grailsApplication
void testSomething() {
given:
def myService = grailsApplication.mainContext.getBean('myService')
...
将测试范围从单例更改为会话也可以解决问题,但我不知道这是否可行