Как мне убедиться, что моя документация обновлена ​​с помощью Spring Rest Docs?

Мне очень нравится концепция использования неудачных тестов для обеспечения актуальности документации. Но я не знаю, как заставить это работать для вложенного 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 и подвеска.type не определены. Есть ли способ заставить его работать? Несколько тестов?

1 ответ

Цель состояла в том, чтобы позволить людям документировать все поля, если они хотят, не заставляя их делать это. Однако, как вы заметили, это может привести к пропуску нового поля в API. Оглядываясь назад, это, вероятно, было ошибкой.

Один из способов избежать пропуска нового поля - документировать только "листовые" поля. В вашем примере это будет:

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

Вы можете сделать это в отдельном тесте, если вы также хотите сохранить более подробную документацию. Другой альтернативой было бы использовать что-то вроде JsonPath для утверждения структуры полезной нагрузки.

Я понимаю, что ни один из них не является идеальным, поэтому я открыл https://github.com/spring-projects/spring-restdocs/issues/274.

Другие вопросы по тегам