2016-06-05 2 views
1

Я пытаюсь интегрировать документы Spring REST с уверенностью с приложением Grails 3.1.4. Я использую JSON Views.Grails 3 - Spring Rest Docs, используя Rest, обеспечивающий исключение SnippetException при использовании представлений JSON

Полный код находится на https://github.com/rohitpal99/rest-docs

В NoteController, когда я использую

List<Note> noteList = Note.findAll() 
Map response = [totalCount: noteList.size(), type: "note"] 
render response as grails.converters.JSON 

поколение документов работает хорошо.

Но я хочу использовать представления JSON, как

respond Note.findAll() 

где я _notes.gson и index.gson файлы в каталоге/просмотров. Я получаю исключение SnippetException. Ответ на обычный запрос/ответ GET правильный.

rest.docs.ApiDocumentationSpec > test and document get request for /index FAILED 
    org.springframework.restdocs.snippet.SnippetException at ApiDocumentationSpec.groovy:54 

без сообщения. Невозможно отслеживать, почему это происходит. Пожалуйста, предложите.

Полный StackTrace

org.springframework.restdocs.snippet.SnippetException: The following parts of the payload were not documented: 
{ 
    "instanceList" : [ { 
    "title" : "Hello, World!", 
    "body" : "Integration Test from Hello" 
    }, { 
    "title" : "Hello, Grails", 
    "body" : "Integration Test from Grails" 
    } ] 
} 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.validateFieldDocumentation(AbstractFieldsSnippet.java:134) 
    at org.springframework.restdocs.payload.AbstractFieldsSnippet.createModel(AbstractFieldsSnippet.java:74) 
    at org.springframework.restdocs.snippet.TemplatedSnippet.document(TemplatedSnippet.java:64) 
    at org.springframework.restdocs.generate.RestDocumentationGenerator.handle(RestDocumentationGenerator.java:192) 
    at org.springframework.restdocs.restassured.RestDocumentationFilter.filter(RestDocumentationFilter.java:63) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73) 
    at org.springframework.restdocs.restassured.RestAssuredRestDocumentationConfigurer.filter(RestAssuredRestDocumentationConfigurer.java:65) 
    at com.jayway.restassured.internal.filter.FilterContextImpl.next(FilterContextImpl.groovy:73) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.applyPathParamsAndSendRequest(RequestSpecificationImpl.groovy:1574) 
    at com.jayway.restassured.internal.RequestSpecificationImpl.get(RequestSpecificationImpl.groovy:159) 
    at rest.docs.ApiDocumentationSpec.$tt__$spock_feature_0_0(ApiDocumentationSpec.groovy:54) 
    at rest.docs.ApiDocumentationSpec.test and document get request for /index_closure2(ApiDocumentationSpec.groovy) 
    at groovy.lang.Closure.call(Closure.java:426) 
    at groovy.lang.Closure.call(Closure.java:442) 
    at grails.transaction.GrailsTransactionTemplate$1.doInTransaction(GrailsTransactionTemplate.groovy:70) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133) 
    at grails.transaction.GrailsTransactionTemplate.executeAndRollback(GrailsTransactionTemplate.groovy:67) 
    at rest.docs.ApiDocumentationSpec.test and document get request for /index(ApiDocumentationSpec.groovy) 
+0

Какова полная трассировка стека исключения? –

+0

Привет, Энди, спасибо за ответ. Я добавил полную трассировку, в SnippetException не так много информации. – rohitpal

+0

Спасибо, но это stacktrace от Gradle, когда он не удается построить из-за неудачного теста. Это тест из теста, который будет полезен. Он должен быть доступен в отчете об испытаниях –

ответ

5

REST Docs будет провалить испытание, если вы пытаетесь документировать то, что не существует или не документировать то, что есть. Вы документированы два поля в тесте:

responseFields(
    fieldWithPath('totalCount').description('Total count'), 
    fieldWithPath('type').description("Type of result") 
))) 

REST Документы провалили испытание, как не были документированы некоторые части ответа. Конкретно массив instanceList, который содержит карты с двумя ключами: title и body. Вы можете документировать те и другие два поля примерно следующим образом:

responseFields(
    fieldWithPath('totalCount').description('Total count'), 
    fieldWithPath('type').description("Type of result"), 
    fieldWithPath('instanceList[].title').description('Foo'), 
    fieldWithPath('instanceList[].body').description('Bar') 
))) 
Смежные вопросы