2

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

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

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

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

4

2 回答 2

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);

像一种享受一样工作。

于 2010-05-28T14:54:33.147 回答
2

您需要存根 HttpRequest.Headers 属性以返回包含“X-Requested-With”条目且值为“XMLHttpRequest”的 NameValueCollection。

于 2010-05-28T13:01:48.863 回答