Grails 3.3.11集成测试(GrailsApplication)

时间:2020-10-02 16:26:36

标签: grails

我现在在集成测试中遇到配置变量GrailsApplication的麻烦。我不知道为什么,但是,在测试我的api时,我没有设法获得它的价值。我正在使用Grails 3.3.11。变量的值为null,由于这个原因,我无法通过身份验证执行测试。多谢您的协助。我正在使用Grails 3.3.11。

package br.com.xxx.id.test.integration

//Imports were moved out to simplify understanding

class IdControllerSpec extends Specification {
    def grailsApplication
    @Value('${local.server.port}')
    Integer serverPort
    String accessToken
    String baseUrl
    JSONObject documentPropertiesForTesting
    JSONObject documentForTesting
    String partTest
    String userTest
    String typeIdTest
    String refreshToken

    void setup(){
        baseUrl = "http://localhost:${serverPort}/cmbid/api/v1"
        partTest = "partTest"
        
    }

void "Saving a new and valid document properties"() {
        when:
            refreshToken = grailsApplication.config.getProperty('refreshToken')
            accessToken = "Bearer " + authenticateXxxAut()
            documentPropertiesForTesting = createNewTestDocumentProperties()
            typeIdTest = documentPropertiesForTesting.get("message").toString().substring(20,52)

        then:
            documentPropertiesForTesting.get("status") == "ok"
            documentPropertiesForTesting.get("message").contains("properly saved!")

        cleanup:
            DocumentProperties.withNewSession {
                def dp = DocumentProperties.findById(typeIdTest)
                dp.delete(flush: true)
            }
    }

def authenticateXxxAut() {
        CloseableHttpClient httpClient = HttpClients.createDefault();
        String response = ""
        try {
            JSONObject responseBody
            println('****************************')
            println(grailsApplication.config.getProperty('aut.newTokenUrl'))
            println(grailsApplication.config.getProperty('refreshToken)'))
            println('****************************')

            def httpPost = new HttpPost(grailsApplication.config.getProperty('aut.newTokenUrl') + grailsApplication.config.getProperty('refreshToken)'))
            CloseableHttpResponse httpResponse = httpClient.execute(httpPost)

            if (httpResponse.getStatusLine().getStatusCode() == 200) {
                responseBody = new JSONObject(EntityUtils.toString(httpResponse.getEntity()))
                response = responseBody.get("access_token")
            } else {
                response = httpResponse.getStatusLine().getStatusCode().toString()
            }
        } catch (Exception e){
            print(e.getLocalizedMessage())
        } finally {
            httpClient.close()
            return response
        }
    }

1 个答案:

答案 0 :(得分:0)

我一直在将 Grails 2.x 应用程序升级到版本 3.3.11,只是引用(提供的)变量 serverPort 对我有用。 IDE 将其显示为未初始化,但在运行测试时,它会获得正确的分配值。我还用 @Integration(applicationClass = Application.class) 注释了我的测试类。

这是我如何获取指向的 URL:

def url = "http://localhost:${serverPort}${grailsApplication.config.getProperty('server.contextPath', String, '')}"