2014-09-02 7 views
9

Ich habe Schwierigkeiten herauszufinden, wie mit jsonPath in einer JSON-Dokument-Antwort im Frühjahr mvc. Vielleicht gibt es einen besseren Weg, dies zu erreichen, als jsonPath für dieses spezielle Szenario zu verwenden. Ich würde gerne bestätigen, dass das Links-Array ein rel-Element von "self" hat und dass das "href" -Attribut des Objekts von "self" auch ein "href" -Attribut hat, das gleich "/" ist. Die JSON-Antwort wie folgt aussieht:Asserting Array von Arrays mit JSONPath und Frühjahr mvc

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

ich schon versucht, diese, wo ich sehen kann, dass es rel [0] hat sich selbst, aber ich würde es vorziehen, nicht darauf zu verlassen, wo in der Links-Array und rel Array ist das Selbst und teste tatsächlich was das href ist bei Links [rel] [self] ist "/". Irgendwelche Ideen?

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

Antwort

9

Wie über das Hinzufügen von mehreren andExpect Methoden? Ähnliches:

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

Wissen Sie, ob es einen Weg gibt, dies zu tun, ohne die Array-Indizes hart zu codieren (falls die Reihenfolge anders ist)? –

+0

Kevin, Sie können regexp in Ihrem jsonpath verwenden, wie diese $ .links [? (@. Rel = ~ /.*self/i)] oder so ähnlich. Bitte überprüfen Sie die vollständige Dokumentation hier: https://github.com/json-path/JsonPath –