我的应用程序正在使用spring-data-rest
和spring-restdocs
。我的设置非常标准;几乎完全从文档中复制,但我已经包含了下面的示例,以防我遗漏了一些东西。当我的 mvc 测试运行时,它失败了:
org.springframework.restdocs.snippet.SnippetException: The following parts of the payload were not documented:
{
"_links" : {
"self" : {
"href" : "https://my-api/item/10"
},
"item" : {
"href" : "https://my-api/item/10"
}
}
}
这是我的测试代码:
@Rule
public JUnitRestDocumentation restDocs = new JUnitRestDocumentation("target/generated-snippets");
// ...
mockMvc = webAppContextSetup(wac) //WebApplicationContext
.apply(documentationConfiguration(restDocs)
.uris()
.withHost("my-api")
.withPort(443)
.withScheme("https"))
.build();
// ....
mockMvc.perform(get("/items/{id}", "10"))
.andDo(documentation)
这是堆栈:
at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:176)
at org.springframework.restdocs.payload.AbstractFieldsSnippet.createModel(AbstractFieldsSnippet.java:100)
at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64)
at org.springframework.restdocs.generate.RestDocumentationGenerator.handle(RestDocumentationGenerator.java:196)
at org.springframework.restdocs.mockmvc.RestDocumentationResultHandler.handle(RestDocumentationResultHandler.java:55)
at org.springframework.test.web.servlet.MockMvc$1.andDo(MockMvc.java:177)
at com.example.my.api.domain.MyRepositoryRestTest.findOne(MyRepositoryRestTest.java:36)
我如何获得spring-restdocs
并spring-data-rest
玩得好?
编辑:
我的documentation
实例定义如下:
ResultHandler documentation = document("items/findOne",
preprocessRequest(prettyPrint(), maskLinks()),
preprocessResponse(prettyPrint()),
responseFields(
fieldWithPath("name").description("Item name.")
// Bunch more
));
正如@meistermeier 指出的那样,(并遵循restdocs docs for ignoring links,我可以添加
links(linkWithRel("self").ignored(),
linkWithRel("_self").ignored().optional()) // docs suggest this. /shrug
但这仍然给我留下了:
SnippetException:未记录具有以下关系的链接:[项目]
似乎_links
总是会将自我引用返回到同一个实体,对吧?如何在不忽略每个测试的实体特定链接的情况下干净地处理这个问题,例如:
links(linkWithRel("item").ignored())
即使我确实添加了上面的行(以便所有字段self
_self
curies
和item
都是ignored()
和/或optional()
),测试结果也会返回到该问题顶部的原始错误。