首页 > 解决方案 > 如何在 TestHttpClient 中设置 POST 参数

问题描述

我正在使用 Ratpack 的TestHttpClientPOST在 Spock 测试中为 REST API发送请求。API 的端点接受该参数myPostParam作为请求正文/POST 参数的一部分。

我看到有一种post方法可以执行 POST 请求,但我不知道如何发送参数myPostParam=123456

import ratpack.groovy.test.GroovyRatpackMainApplicationUnderTest
import ratpack.test.http.TestHttpClient
import ratpack.test.ServerBackedApplicationUnderTest
import spock.lang.Specification

class MyApiSpecification extends Specification {

  ServerBackedApplicationUnderTest aut = new GroovyRatpackMainApplicationUnderTest()
  @Delegate
  TestHttpClient client = testHttpClient(aut)

  def "Doing a API call for Stackoverflow"() {
    given:
    int myPostParam = 123456

    when:
    post("/api/v1.0/someMethod/")
    // TODO: How do I add "myPostParam=$myPostParam" to the request body?

    then:
    response.statusCode == 201
    response.body.text.empty
  }
}

标签: groovyspockratpack

解决方案


可以TestHttpClient.params(action)用来设置请求参数。这样的事情应该可以解决问题:

import ratpack.groovy.test.GroovyRatpackMainApplicationUnderTest
import ratpack.test.http.TestHttpClient
import ratpack.test.ServerBackedApplicationUnderTest
import spock.lang.Specification

class MyApiSpecification extends Specification {

  ServerBackedApplicationUnderTest aut = new GroovyRatpackMainApplicationUnderTest()
  @Delegate
  TestHttpClient client = testHttpClient(aut)

  def "Doing a API call for Stackoverflow"() {
    given:
    int myPostParam = 123456

    when:
    params({ params ->
      params.put("myPostParam", myPostParam)
    }).post("/api/v1.0/someMethod/")

    then:
    response.statusCode == 201
    response.body.text.empty
  }
}

推荐阅读