2010-05-28 80 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); 

工程就像一種享受。