我想在Geb测试中使用一个服务来填充一些示例数据。示例数据庞大而复杂,我们已经编写了代码来为其他控制器和服务创建它。因此,一个简单的模拟是不可能的。如何在Geb测试中访问此服务?
我们假设我的服务名称是testDataService,看起来像这样......
class TestDataService {
def otherService
void importData() {
otherService.getData()
}
}
像Geb中的以下内容将是理想的...
class testSpec extends GebReportingSpec {
@Shared def testDataService
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
据我所知,这应该适用于正常的集成测试。由于它是一个功能测试,事情是完全不同的,它返回null。
我发现了很多关于Grails Remote Control插件的建议,但我想知道如何在没有它的情况下做到这一点。
一些附注......
服务类位于src / groovy中。虽然我确信我已正确连接它,因为它在其他服务调用时按预期工作。仅在功能测试中它不起作用。
Grails版本:2.4.5
Geb 0.10.0
答案 0 :(得分:3)
Grails 2.4.5
def testDataService = Holders.applicationContext.getBean("testDataService")
所以我们的测试规范看起来像这样......
class testSpec extends GebReportingSpec {
@Shared def testDataService = Holders.applicationContext.getBean("testDataService")
def setupSpec() {
testDataService.importData()
}
def test1() {
...some test...
}
}
请注意,应该存在来自其他服务的所有注入依赖项。
答案 1 :(得分:2)
有远程控制插件:http://grails.org/plugin/remote-control;说明在https://github.com/alkemist/grails-remote-control/
您将在测试中添加RemoteControl
实例并在测试中运行remote.call{ /* server side code */ }
(请注意,这必须返回可序列化的内容)。