我正在尝试使用以下代码模拟帖子请求。
我正在测试一个Spring安全登录请求。
$(function() {
$("#btnSave").click(function() {
html2canvas($("#map"), {
onrendered: function(canvas) {
theCanvas = canvas;
document.body.appendChild(canvas);
// Convert and download as image
Canvas2Image.saveAsPNG(canvas);
$("#img-out").append(canvas);
// Clean up
//document.body.removeChild(canvas);
}
});
});
});
var map = new GMaps({
div: '#map',
lat: -12.043333,
lng: -77.028333
});
代码工作正常,登录成功后,我将重定向到另一个控制器。
MockMvc mvc = MockMvcBuilders.webAppContextSetup(context).addFilter(springSecurityFilterChain)
.apply(springSecurity())
.build();
MvcResult mvcResult = mvc.perform(post("/j_spring_security_check?api=true").param("userName", USERNAME)
.param("password", PASSWORD)).andReturn();
当我运行测试时,我得到以下日志。重定向不会发生,并且未调用映射到/ myURL的控制器。
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication authentication) throws IOException,
ServletException {
RequestDispatcher rd = request.getRequestDispatcher("/myURL");
rd.forward(request, response);
}
没有报告错误。
我错过了什么吗?使用MockMvc时不会发生重定向吗?
答案 0 :(得分:4)
使用MockMvc时不会发生重定向吗?
NO。
以下内容直接来自参考手册的Differences between Out-of-Container and End-to-End Integration Tests部分。
可能会让您感到意外的是,默认情况下没有上下文路径,没有jsessionid cookie,没有转发,错误或异步调度,因此没有实际的JSP呈现。相反,“转发”和“重定向”的URL保存在MockHttpServletResponse中,可以满足期望。
因此,您所能做的就是验证转发将发生在真实的Servlet容器中,并通过调用andExpect(forwardedUrl("/myURL"))
而不是andReturn()
来实现。< / p>
请注意,forwardedUrl
是MockMvcResultMatchers
中的静态方法。