【问题标题】:Grails Scoped Service in Integration Test集成测试中的 Grails 范围服务
【发布时间】:2013-01-27 18:09:34
【问题描述】:

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

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

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

class MyServiceIntegrationSpec extends IntegrationSpec {
  def myService
  ...
}

我总是得到错误:

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

我做错了什么?

【问题讨论】:

    标签: grails scope integration-testing


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 2021-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-06
      相关资源
      最近更新 更多