繁体   English   中英

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

[英]How to access grailsApplication and ApplicationContext in Functional Tests

我正在构建一个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中为文件(如解释在这里 ),但有一个FileNotFoundException异常。

但是他们都没有在我的功能测试中提供grailsApplication.config。

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

UPDATE

@dmahapatro

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

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

class LoginFunctionalSpec extends Specification {
  def grailsApplication

  def setUp() {
     def port = grailsApplication.config.mongo.port //throws NPE
  }
}

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM