2014-09-02 16 views
9

Ho difficoltà a capire come far valere con jsonPath in una risposta al documento JSON in spring mvc. Forse c'è un modo migliore per farlo, piuttosto che usare jsonPath per questo particolare scenario. Vorrei convalidare che l'array di collegamenti ha una voce rel di "self" e che l'attributo "href" dell'oggetto di "self" ha anche un attributo "href" che è uguale a "/". La risposta JSON è simile al seguente:Asserimento array di array con JSONPath e mvc di primavera

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

Ho provato questo dove posso vedere che ha rel [0] ha di sé, ma io preferirei non fare affidamento su dove nella matrice link e la matrice rel il sé è e in realtà testare cosa sia href nei collegamenti [rel] [self] è "/". Qualche idea?

@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"))); 
    } 

risposta

9

ne dite di aggiungere diversi andExpect metodi? Qualcosa di simile a:

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

Sapete se c'è un modo per farlo senza hardcoding gli indici degli array (nel caso in cui l'ordine è diverso)? –

+0

Kevin, puoi usare regexp nel tuo jsonpath, come $ .links [? (@. Rel = ~ /.*self/i)] o qualcosa del genere. Per favore, controlla la documentazione completa qui: https://github.com/json-path/JsonPath –