2010-05-28 79 views
2

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

我使用的是TestHelper样本中显示成立TestControllerBuilder

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

相同的代码,以便_controller拥有所有伪造/嘲笑的HttpContext里面,这实在是太棒了。但是我现在要做什么来强制内部伪装的Request对象上的IsAjaxRequest()返回true?

回答

2

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

+0

谢谢,这听起来不错,但我怎么实际上做到这一点。我真的不知道Rhino Mocks。我已经用了一点Moq,但是我不知道从哪里开始挖掘HttpRequest.Headers属性。你能告诉我一些让我开始帕特里克的代码吗? – 2010-05-28 14:12:30

+0

它确定,我想通了。我已经添加了另一个答案,所以我可以粘贴我使用的代码以防别人帮助其他人。谢谢帕特里克你肯定把我放在正确的轨道上。 – 2010-05-28 14:46:19

+0

var request = _builder.HttpContext.Request; request.Stub(r => r.Headers).Return(new NameValueCollection {{“X-Requested-With”,“XMLHttpRequest”}}); – PatrickSteele 2010-05-28 14:52:44

7

这里是我使用的代码,我在页​​面顶部的问题中的代码使用MvcContrib testhelpers创建一个内部伪造了HttpRequest,HttpResponse等版本的假控制器(_controller)。然后按照Patrick的建议,我创建了一个包含X-Requested-With条目的新标题集合。然后当_controller.HttpContext.Request.headers告诉_controller.HttpContext.Request.headers每当它试图查看头文件时(即在调用IsAjaxRequest()时发生这种情况),就返回我的头文件集合。

var headers = new NameValueCollection(); 
    headers.Add("X-Requested-With", "XMLHttpRequest"); 

    _controller.HttpContext.Request.Stub(r => r.Headers).Return(headers); 

工程就像一种享受。