2017-02-20 4 views
1

У меня есть приложение, использующее java, thymeleaf и springboot. На домашней странице localhost: 8080 пользователей должны ввести значение, которое будет перенаправлено на вторую страницу «localhost: 8080/getValues»Как написать junit-тест, который зависит от страницы индекса?

Как написать junit-тест, чтобы я мог проверить ожидаемые значения? В настоящее время мои тесты приближаются, поскольку 404 страница не найдена, потому что она зависит от значения, которое пользователь вводит на домашней странице.

Тест

@Test 
public void test() throws Exception { 

    this.mockMvc.perform(get("/")) 
    .andExpect(status().isOk()) 
    .andExpect(view().name("index")) 
    .andDo(print()); 
    //test passes 
} 

@Test 
public void testVals() throws Exception { 

    this.mockMvc.perform(post("getValues")) 
     .andExpect(status().isNotFound()) //passes 
     .andExpect(model().attributeExists("webHist")); //fails //no modelandviewfound 

} 

Контроллер

@RequestMapping(value = "/", method = RequestMethod.GET) 
    public ModelAndView index(Locale locale) throws MalformedURLException { 
     ModelAndView model = new ModelAndView("index"); 

     return model; 
    } 

@RequestMapping(value = "/getValues", method = RequestMethod.POST) 
    public ModelAndView getValues(Info info) throws MalformedURLException { 

     ModelAndView model = new ModelAndView("getValues"); 
     model.addObject("userID", info.userID()); 

     Customer custinfo = index.readXML(info.userID()); 
     model.addObject("custinfo", custinfo); 

     model.addObject("webHist", Web_HistoryRepo.getAll(info.userID())); 

     return model; 
    } 
+0

Вы могли бы показать код, как выглядят контроллеры? – pezetem

+0

@pezetem Я добавил свой контроллер, не могли бы вы рассказать мне, как я смогу изменить эту многостраничную логику на SPA? Я думаю, что если я изменю его на SPA, он удалит зависимость – Jesse

ответ

0

О модульного тестирования, вы не посылая, он должен что-то Info info вам не хватает содержания() в вашем устройстве подобные

this.mockMvc.perform(post("getValues")) 
     .contentType(MediaType.APPLICATION_JSON) 
     .content(INFO_IN_JSON_FORM) 
     .andExpect(status().isNotFound()) //passes 
     .andExpect(model().attributeExists("webHist")); 

если он все еще не работает, добавьте .andDo(print()) до конца теста, чтобы получить более подробную информацию о результате.

Далее я не понимаю, как выглядит ваш весь контроллер, если он аннотируется с помощью @RestController, если вы не должны добавить @RequestBody в метод getValues ​​(), чтобы информация была сопоставлена ​​с Json.

Если речь идет о SPA, вы не возвращаете ModelAndView, а ответы Json и ваш интерфейс интерпретируют его.

+0

.content не работает. Я попытался импортировать MediaType. но появляются ошибки. «APPLICATION_JSON не может быть разрешен или не является полем» import org.springframework.http – Jesse

+0

Мой контроллер имеет аннотацию @Controller. Если я не использую ModelAndView Каков процесс? Можете ли вы предоставить мне URL-адрес, где я могу преобразовать его в SPA. – Jesse

+0

для SPA вы можете попробовать с угловым учебным пособием (https://angular.io/docs/ts/latest/tutorial/), я считаю, что вы используете JSP в своем коде и SPA, а это невозможно. – pezetem