2014-09-02 6 views
9

Мне трудно понять, как утверждать с помощью jsonPath в ответе документа JSON весной mvc. Возможно, есть лучший способ сделать это, чем использовать jsonPath для этого конкретного сценария. Я хотел бы подтвердить, что массив ссылок имеет элемент rel «self» и что атрибут «href» объекта «self» также имеет атрибут «href», который равен «/». Ответ JSON выглядит следующим образом:Утверждение массива массивов с JSONPath и весной mvc

{ 
    "links":[ 
     { 
     "rel":[ 
      "self" 
     ], 
     "href":"/" 
     }, 
     { 
     "rel":[ 
      "next" 
     ], 
     "href":"/1" 
     } 
    ] 
} 

Я попробовал это, где я могу видеть, что это отн [0] имеет сам, но я предпочел бы не полагаться на том, где в ссылки массива и массива отн самость и на самом деле проверить, что этот href находится в ссылках [rel] [self] is//. Любые идеи?

@Before 
    public void setup() { 
    MockitoAnnotations.initMocks(this); 
    mockMvc = MockMvcBuilders.standaloneSetup(welcomeController).build(); 
    } 

    @Test 
    public void givenRootUrl_thenReturnLinkToSelf() throws Exception { 
    mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) 
     .andExpect(jsonPath("$.links[0].rel[0].", is("self"))); 
    } 

ответ

9

Как о добавлении нескольких andExpect методов? Нечто похожее на:

mockMvc.perform(get("/")).andDo(print()).andExpect(status().isOk()) 
    .andExpect(jsonPath("$.links[0].rel[0]", is("self"))) 
    .andExpect(jsonPath("$.links[0].href[0]", is("/")); 
+0

Знаете ли вы, есть ли способ сделать это без жесткого кодирования индексов массива (в случае, если порядок отличается)? –

+0

Kevin, вы можете использовать regexp в jsonpath, например $ .links [? (@. Rel = ~ /.*self/i)] или что-то вроде этого. Пожалуйста, проверьте полную документацию здесь: https://github.com/json-path/JsonPath –