How to test Thymeleaf with MockMVC and standaloneSetup and no WebApplicationContext?

Я хочу протестировать контроллер, который возвращает страницу, используя шаблон Thymeleaf, с MockMVC,

Это мой тест:

class PostControllerTest {

    ...

    @BeforeClass
    fun setUp() {
        MockKAnnotations.init(this)

        mockMvc = MockMvcBuilders.standaloneSetup(postController)
                .build()
    }

    @Test
    fun testGetFirstPost() {
        every { postRepository.find(1) } returns post

        mockMvc.perform(get("/post/1"))
                .andExpect(status().`is`(200))
                .andExpect(model().attribute("post", equalTo(post)))
    }
}

Но я получаю исключение:

Путь к циклическому представлению [post]: снова отправит обратно на текущий URL обработчика [/post].

Имя сопоставления контроллера и шаблон совпадают (post).

Я не хочу использовать WebApplicationContext или что-то вроде этого.

1 ответ

Решение

Вы должны добавить ViewResolver распознать шаблон:

mockMvc = MockMvcBuilders.standaloneSetup(postController)
            .setViewResolvers(viewResolver())
            .build()

куда viewResolver() является:

private fun viewResolver(): InternalResourceViewResolver {
    val viewResolver = InternalResourceViewResolver()

    // configuration
    viewResolver.setPrefix("/templates/")
    viewResolver.setSuffix(".html")

    return viewResolver
}
Другие вопросы по тегам