Тестирование Spring asyncResult () и jsonPath () вместе
я использую успокоительный URL, чтобы запустить длительный бэкэнд-процесс (он обычно выполняется по расписанию cron, но мы хотим иметь возможность запускать его вручную).
Код ниже работает, и я вижу результат в браузере, когда я тестирую вручную.
@ResponseBody
@RequestMapping(value = "/trigger/{jobName}", method = RequestMethod.GET)
public Callable triggerJob(@PathVariable final String jobName) {
return new Callable() {
@Override
public TriggerResult call() throws Exception {
// Code goes here to locate relevant job and kick it off, waiting for result
String message = ;
return new TriggerResult(SUCCESS, message);
}
};
}
Когда я проверяю это безCallable
Я использовал код ниже, и все это работает (я изменил ожидаемое сообщение об ошибке, чтобы упростить публикацию).
mockMvc.perform(get("/trigger/job/xyz"))
.andExpect(status().isOk())
.andDo(print())
.andExpect(jsonPath("status").value("SUCCESS"))
.andExpect(jsonPath("message").value("A meaningful message appears"));
Когда я добавилCallable
Однако это не работает. Я также попробовал ниже, но это не сработало. У кого-нибудь еще был успех?
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")));
Ниже приведена соответствующая часть из моей печати (). Похоже, mockMvc можетправильно распутать Json в этом случае (даже если он работает в моем браузере)? Когда я делаю это безCallable
Я вижу полный 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.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 = []