关于MvcContrib TestHelpers的新手问题

时间:2010-05-28 12:50:07

标签: asp.net asp.net-mvc mvccontrib-testhelper

我刚开始在MvcContrib中使用TestHelpers。我想尝试在我的控制器上测试一个动作方法,该方法本身测试IsAjaxRequest()是否为真。

我使用了TestHelper示例中显示的相同代码来设置TestControllerBuilder

_controller = new StarsController();    
_builder = new TestControllerBuilder();
_builder.InitializeController(_controller);

所以_controller里面有所有伪造/模拟的HttpContext,这真的很棒。但是我现在要做什么来强制内部伪造的Request对象上的IsAjaxRequest()返回true?

2 个答案:

答案 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”。