如何确保我的文档与Spring Rest Docs保持同步?

时间:2016-07-07 08:30:05

标签: json spring spring-restdocs

我非常喜欢使用失败的测试来确保文档是最新的。但我不知道如何让它适用于嵌套的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,也会通过具有这些响应字段定义的测试。有没有办法让它发挥作用?多次测试?

1 个答案:

答案 0 :(得分:0)

目的是让人们在需要时记录所有字段,而不强迫他们这样做。但是,正如您所观察到的,它可能会导致错过API中的新字段。事后看来,这可能是一个错误。

避免错过新字段的一种方法是仅记录" leaf"领域。在您的示例中:

  • car.motor.brand
  • car.motor.power
  • suspension.type

如果您还想保留更详细的文档,可以在单独的测试中执行此操作。另一种选择是使用类似JsonPath的东西来断言有效载荷的结构。

我意识到这些都不是理想的,所以我打开了https://github.com/spring-projects/spring-restdocs/issues/274