如何获取运行 Grails 3.1.9 集成测试的 URL?

Ser*_*Amo 2 grails grails-3.1

来自 Grails 3.1.9 发布说明:

集成测试端口集成和功能测试现在在随机端口上运行,而不是默认情况下与应用程序相同的端口。这是为了在应用程序已经运行时避免端口冲突问题。需要更改对端口进行硬编码的集成测试,以使用标有 @Integration 的测试的 serverPort 属性

我通常使用以下方式获取集成测试网址

import grails.util.Holders ... .. . def urlWhereIntegrationAppIsRunning = Holders.grailsApplication.config.grails.serverURL

然后在我的 application.yml 我有类似的东西:

test: server: port: 8090 grails: serverURL: http://localhost:8090

如何在集成测试中使用 Grails 3.19 获取我的集成测试运行的 URL(服务器 URL 和随机端口)?

解决方案

基于 Marco 的回答,我做了一个 Trait 来封装集成测试运行的 url。我在测试 API 的 Spock 规范中实现了这个特性。

import org.springframework.beans.factory.annotation.Value

trait TIntegrationServerUrl {

    @Value('${local.server.port}')
    Integer serverPort

    String integrationServerUrl() {
        "http://localhost:$serverPort"
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*rco 5

您可以在集成测试中使用以下内容。

@Value('${local.server.port}')
Integer port
Run Code Online (Sandbox Code Playgroud)

这将为您提供测试中的端口