Spring REST Docs - 更新REST确保测试生成的响应片段中的URI

时间:2017-09-05 10:26:00

标签: java spring rest-assured spring-restdocs

将REST Assured与REST Docs结合使用时,我的问题是请求更新了端口,但响应中的所有HATEOAS链接都指向测试运行的任何地址。

从REST Docs文档中,我了解了如何使用预处理器更新请求:

.addFilter(document("{class-name}/{method-name}/{step}", preprocessRequest(
    modifyUris().scheme("http")
          .host("localhost")
          .port(9999),
    removeHeaders("Accept"))))

但是无法找到是否有支持修改端口int的响应。例如,当我想将配置中的端口设置为9999时:

curl-request.adoc: (这很好:localhost:9999)

$ curl 'localhost:9999/request/data' -i

response-body.adoc: (我想将localhost:51123更改为localhost:9999)

{
  "_links" : {
    "requests" : {
      "href" : "localhost:51123/request/data/requests{?page,size,sort,projection}",
      "templated" : true
    },
    "users" : {
      "href" : "localhost:51123/request/data/users{?projection}",
      "templated" : true
    },
    "profile" : {
      "href" : "localhost:51123/request/data/profile"
    }
  }
}

是否有任何可接受的方式使用REST Docs或REST Assured来修改响应内容?我假设我可以创建一个@AfterClass方法来解析更新这些资源,但我希望能有更清洁的东西。

[后续] 我接受了下面Andy W.的答案,但是想为有同样问题的人提供更多信息 -

我的问题是我试图将文档过滤器添加两次:

.addFilters(Arrays.asList(
    document("{class-name}/{method-name}/{step}",
        preprocessRequest(modifyUris().scheme("http")
                                    .host("localhost")
                                    .port(9999))),
    document("{class-name}/{method-name}/{step}",
        preprocessResponse(modifyUris().scheme("http")
                                       .host("localhost")
                                       .port(9999))))

VS。使用参数调用document方法:

RestDocumentationFilter文档(字符串标识符, OperationRequestPreprocessor requestPreprocessor OperationResponsePreprocessor responsePreprocessor ,Snippet ... snippets)

https://docs.spring.io/spring-restdocs/docs/current/api/org/springframework/restdocs/restassured3/RestAssuredRestDocumentation.html#document-java.lang.String-org.springframework.restdocs.operation.preprocess.OperationRequestPreprocessor-org.springframework.restdocs.operation.preprocess.OperationResponsePreprocessor-org.springframework.restdocs.snippet.Snippet...-

一旦我做出改变,一切都按预期工作。 干杯!

1 个答案:

答案 0 :(得分:1)

是的,有。来自the documentation

  modifyUris上的

RestAssuredPreprocessors可用于修改请求或响应中的任何URI。使用REST Assured时,这允许您在测试本地服务实例时自定义文档中显示的URI。