我非常喜欢使用失败的测试来确保文档是最新的。但我不知道如何让它适用于嵌套的json。 Spring REST Docs处理分层有效负载的方式似乎打败了目的:
记录字段时,如果在有效负载中找到未记录的字段,则测试将失败。同样,如果在有效负载中找不到文档字段且该字段未标记为可选,则测试也将失败。 对于具有分层结构的有效负载,记录字段足以使其所有后代也被视为已记录。
您如何编写嵌套json的测试,因此对有效负载的更改会导致测试失败?
示例:
{
car: {
motor : {
brand: "Porsche",
power: "165 kW"
},
suspension: {
type: "automatic"
}
}
测试:
.andDo(document("mytest", responseFields(
fieldWithPath("car").description("the car").type(JsonFieldType.OBJECT),
fieldWithPath("car.motor").description("the motor").type(JsonFieldType.OBJECT),
fieldWithPath("car.motor.brand").description("the motor brand").type(JsonFieldType.STRING),
fieldWithPath("car.suspension").description("the suspension"))))
即使未定义car.motor.power和suspension.type,也会通过具有这些响应字段定义的测试。有没有办法让它发挥作用?多次测试?
答案 0 :(得分:0)
目的是让人们在需要时记录所有字段,而不强迫他们这样做。但是,正如您所观察到的,它可能会导致错过API中的新字段。事后看来,这可能是一个错误。
避免错过新字段的一种方法是仅记录" leaf"领域。在您的示例中:
car.motor.brand
car.motor.power
suspension.type
如果您还想保留更详细的文档,可以在单独的测试中执行此操作。另一种选择是使用类似JsonPath的东西来断言有效载荷的结构。
我意识到这些都不是理想的,所以我打开了https://github.com/spring-projects/spring-restdocs/issues/274。