Ниже приведен фрагмент кода, для которого я хочу писать тесты:Как высмеять Request.IsAjaxRequest() в true с помощью FakeItEasy?
[HttpGet]
public ActionResult Edit(string id)
{
if (Request.IsAjaxRequest())
{
EditModel model = new EditModel();
.....
}
return View();
}
Я хочу писать тесты для этого действия, где я могу фальсифицировать результат Request.IsAjaxRequest()
к истине, так что я могу писать тесты для отдыха кода действия.
Я пробовал следовать, но он не работает. _request.Headers
всегда пусто, и Request.IsAjaxRequest()
всегда возвращается ложь:
[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'. Можете ли вы указать, где я ошибаюсь, или исправить вопрос, чтобы он, по крайней мере, скомпилировался? –