如何在功能测试中访问grailsApplication和ApplicationContext

时间:2013-09-04 13:14:39

标签: grails functional-testing spock applicationcontext grails-config

我正在构建一个Grails REST应用程序,并且我已经使用Spock编写了我的功能测试。 请注意,这些功能测试仅适用于REST服务。

class LoginFunctionalSpec extends Specification {
  def setUp() {
    // here I want to access grailsApplication.config
  }
}

我已经尝试过以下方法:

  1. 注入grailsApplication(通过定义为类级别变量),但没有注入任何内容。
  2. 使用ApplicationHolder.application.config但已弃用,建议的方法是前一点。
  3. 尝试使用插件远程控制:1.4但是虽然grails控制台显示插件已安装但我没有找到类RemoteControl。我也不确定这种做法
  4. 我尝试将grails-app / conf / Config.groovy作为文件阅读(如here所述),但得到了FileNotFoundException。
  5. 但是他们都没有在我的功能测试中提供grailsApplication.config。

    有没有办法实现这个目标?

    更新

    @dmahapatro

    我没有使用Geb,因为我正在测试REST服务,并且不需要浏览器自动化。

    正如我在第1点中所说的那样,应用程序没有被自动注入。

    class LoginFunctionalSpec extends Specification {
      def grailsApplication
    
      def setUp() {
         def port = grailsApplication.config.mongo.port //throws NPE
      }
    }
    

    它抛出一个NPE,说在null对象上调用了config属性。

2 个答案:

答案 0 :(得分:3)

我认为你不需要明确注入任何东西。默认情况下,grailsApplication在测试中可用。

class LoginFunctionalSpec extends Specification {
  def setUp() {
     grailsApplication.config.blah //should work
  }
}

注 -
Spock不提供功能测试的直接支持。您需要使用Geb进行正确的功能测试。

答案 1 :(得分:1)

您是在集成测试阶段还是功能测试阶段运行测试?

你需要从IntegrationSpec扩展到在集成测试阶段进行自动装配,但是你在这里谈论功能测试...由于grails在与测试中的应用程序相同的JVM中运行测试真的需要使用RemoteControl,但我总是在我的功能测试中做,因为它对我来说似乎更清晰,如果测试中的测试和应用程序没有在同一个JVM中运行,那么这是一个非常强大的技术。