下面是我想要編寫單元測試代碼片段:如何使用FakeItEasy模擬Request.IsAjaxRequest()爲true?
[HttpGet]
public ActionResult Edit(string id)
{
if (Request.IsAjaxRequest())
{
EditModel model = new EditModel();
.....
}
return View();
}
我想編寫單元測試這個動作,我可以僞造的Request.IsAjaxRequest()
到真正的結果,這樣我可以寫其他測試的行爲代碼。
我試過以下,但它不起作用。 _request.Headers
總是空的,並且Request.IsAjaxRequest()
總是返回false:
[Fact]
public void Get_Edit_AjaxRequest_ExpectedActionCalled()
{
HttpRequestBase _request = A.Fake<HttpRequestBase>();
_request.Headers.Add("X-Requested-With", "XMLHttpRequest");
_controller.ControllerContext = A.Fake<ControllerContext>();
_controller.ControllerContext.HttpContext = _request;
A.CallTo(() => _controller.Request).Returns(_request);
var result = _controller.Edit(1) as RedirectToRouteResult;
}
我總是Request.IsAjaxRequest()
爲假。任何幫助,非常感謝。謝謝
我試圖重現,但有大問題。我不是一個MVC傢伙,也許我的問題的一部分是我沒有使用正確的版本(我使用任何與VS2013來的),但'_controller.ControllerContext.HttpContext = _request;'不編譯('HttpRequesteBase'不是'RequestContext'),'_controller.Edit(1)'不會編譯,因爲'Edit'帶有'string'。你能否指出我出錯的地方或者解決問題至少要編譯? –