如何在ASP.NET MVC中测试ajax submition?

eKe*_*ek0 3 asp.net-mvc unit-testing

具体来说,我如何传递静态方法Request.IsAjaxRequest()?

当我尝试测试以下代码时,我得到异常'System.ArgumentNullException':

if (Request.IsAjaxRequest())
{
  return Json(data);
}
return View(data2);
Run Code Online (Sandbox Code Playgroud)

我正在使用Moq.谢谢你的帮助.

eu-*_*-ne 6

您需要模拟Request和Request.Headers来处理Request.IsAjaxRequest():

var request = new Mock<HttpRequestBase>();
request.SetupGet(x => x.Headers).Returns(new System.Net.WebHeaderCollection {
    {"X-Requested-With", "XMLHttpRequest"}
});

var context = new Mock<HttpContextBase>();
context.SetupGet(x => x.Request).Returns(request.Object);

var controller = new YourController();
controller.ControllerContext = new ControllerContext(context.Object, new RouteData(), controller);
Run Code Online (Sandbox Code Playgroud)