Testen von Spring asyncResult () und jsonPath () zusammen
Ich verwende eine erholsame URL, um einen Backend-Prozess mit langer Laufzeit zu starten (normalerweise ist dies nach einem Cron-Zeitplan geplant, wir möchten jedoch die Möglichkeit haben, ihn manuell zu starten).
Der folgende Code funktioniert und ich sehe das Ergebnis im Browser, wenn ich manuell teste.
@ResponseBody
@RequestMapping(value = "/trigger/{jobName}", method = RequestMethod.GET)
public Callable<TriggerResult> triggerJob(@PathVariable final String jobName) {
return new Callable<TriggerResult>() {
@Override
public TriggerResult call() throws Exception {
// Code goes here to locate relevant job and kick it off, waiting for result
String message = <result from my job>;
return new TriggerResult(SUCCESS, message);
}
};
}
Wenn ich das ohne den testeCallable
Ich habe den folgenden Code verwendet und alles funktioniert (ich habe die erwartete Fehlermeldung geändert, um den Beitrag zu vereinfachen).
mockMvc.perform(get("/trigger/job/xyz"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("status").value("SUCCESS"))
.andExpect(jsonPath("message").value("A meaningful message appears"));
Als ich das hinzufügteCallable
es funktioniert jedoch nicht. Ich habe es auch unten versucht, aber es hat nicht funktioniert. Hat sonst noch jemand Erfolg gehabt?
mockMvc.perform(get("/trigger/job/xyz"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(request().asyncResult(jsonPath("status").value("SUCCESS")))
.andExpect(request().asyncResult(jsonPath("message").value("A meaningful message appears")));
Unten ist der relevante Teil aus meinem Druck (). Sieht so aus, als ob mockMvc den Json in diesem Fall nicht richtig entwirren kann (obwohl es in meinem Browser funktioniert)? Wenn ich das ohne macheCallable
Ich sehe volles JSON.
MockHttpServletRequest:
HTTP Method = GET
Request URI = /trigger/job/xyz
Parameters = {}
Headers = {}
Handler:
Type = foo.bar.web.controller.TriggerJobController
Method = public java.util.concurrent.Callable<foo.bar.myproject.web.model.TriggerResult> foo.bar.myproject.web.controller.TriggerJobController.triggerJob(java.lang.String)
Async:
Was async started = true
Async result = foo.bar.myproject.web.model.TriggerResult@67aa1e71
Resolved Exception:
Type = null
ModelAndView:
View name = null
View = null
Model = null
FlashMap:
MockHttpServletResponse:
Status = 200
Error message = null
Headers = {}
Content type = null
Body =
Forwarded URL = null
Redirected URL = null
Cookies = []