我刚开始在MvcContrib中使用TestHelpers。我想尝试在我的控制器上测试一个动作方法,该方法本身测试IsAjaxRequest()是否为真。
我使用了TestHelper示例中显示的相同代码来设置TestControllerBuilder
_controller = new StarsController();
_builder = new TestControllerBuilder();
_builder.InitializeController(_controller);
所以_controller里面有所有伪造/模拟的HttpContext,这真的很棒。但是我现在要做什么来强制内部伪造的Request对象上的IsAjaxRequest()返回true?
答案 0 :(得分:7)
这是我使用的代码,我在页面顶部的问题中的代码使用MvcContrib testhelpers来创建一个非常伪造的控制器(_controller),内部有伪造版本的HttpRequest,HttpResponse等。然后根据Patrick的建议我创建包含X-Requested-With条目的新标头集合。然后告诉_controller.HttpContext.Request.headers在尝试查看标题时返回我的标题集合(即调用IsAjaxRequest()时发生的情况)。
var headers = new NameValueCollection();
headers.Add("X-Requested-With", "XMLHttpRequest");
_controller.HttpContext.Request.Stub(r => r.Headers).Return(headers);
就像一种享受。
答案 1 :(得分:2)
您需要存根HttpRequest.Headers属性以返回一个NameValueCollection,其中包含“X-Requested-With”条目,其值为“XMLHttpRequest”。