2
어제 전체보기 또는 부분보기를 반환하기 위해 어제 아래 메소드를 다시 작성했습니다.Ajax 요청 조롱 및 스텁
public ActionResult List(int page)
{
var viewModel = GetListViewModel(page);
if(Request.IsAjaxRequest())
{
return PartialView("_list", viewModel);
}
return View("PartsList", viewModel);
}
하지만 이제 내 테스트가 실패했습니다. 그들은 if
문을 사용하지 못했습니다. 나는
HttpContextBase mockedContext = MockRepository.GeneratePartialMock<HttpRequestBase>();
HttpRequestBase mockedContext = MockRepository.GeneratePartialMock<HttpContextBase>();
mockedContext.Stub(x => x.Request).Return(mockedRequest);
mockedRequest.Stub(r => r["X-Requested-With"]).Return("");
subject.ControllerContext = new ControllerContext { HttpContext = mockedContext };
나는 내 테스트에서 위를 구현하고 여전히 이상 떨어지고, 구글을 수행하고/당신이 조롱 수 있습니다 발견 같은과 HTTP 요청을 스텁했습니다.
TEST
public class when_asked_for_the_parts_list_view : context_for_part_controller
{
static ActionResult _result;
static IPagination<Part> _parts;
static PartListPageViewModel _partListPageViewModel;
Establish context =() =>
{
mockedContext.Stub(x => x.Request).Return(mockedRequest);
mockedRequest.Stub(r => r["X-Requested-With"]).Return("XMLHttpRequest");
subject.ControllerContext = new ControllerContext { HttpContext = mockedContext };
_parts = new List<Part>().AsPagination(1);
_partListPageViewModel = new PartListPageViewModel();
_partTasks.Stub(x => x.GetParts(1)).Return(_parts);
_listMapper.Stub(x => x.MapFrom(_parts)).Return(_partListPageViewModel);
};
Because of =() =>
{
_result = subject.List(1);
};
It should_retreve_the_parts =
() => _partTasks.AssertWasCalled(x=>x.GetParts(1));
It should_map_the_parts_to_a_viewModel =
() => _listMapper.AssertWasCalled(x => x.MapFrom(_parts));
It should_return_the_list_as_a_partialview =
() => _result.ShouldBeAPartialView().ViewData.Model.ShouldEqual(_partListPageViewModel);
}
ERROR
should map the parts to a viewModel : Failed
The method or operation is not implemented.
System.NotImplementedException: The method or operation is not implemented.
at System.Web.HttpRequestBase.get_Headers()
at HttpRequestBaseProxy5a253d42dd57477f936e24736e848cbb.get_Headers_callback_47()
at HttpRequestBaseProxy5a253d42dd57477f936e24736e848cbb.Invocationget_Headers_66.InvokeMethodOnTarget()
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at Rhino.Mocks.Impl.ReplayPartialMockState.DoMethodCall(IInvocation invocation, MethodInfo method, Object[] args)
at Rhino.Mocks.Impl.ReplayMockState.MethodCall(IInvocation invocation, MethodInfo method, Object[] args)
at Rhino.Mocks.MockRepository.MethodCall(IInvocation invocation, Object proxy, MethodInfo method, Object[] args)
at Rhino.Mocks.Impl.RhinoInterceptor.Intercept(IInvocation invocation)
at Castle.DynamicProxy.AbstractInvocation.Proceed()
at HttpRequestBaseProxy5a253d42dd57477f936e24736e848cbb.get_Headers()
at System.Web.Mvc.AjaxRequestExtensions.IsAjaxRequest(HttpRequestBase request)
at Catalogue.Web.Controllers.Part.PartController.List(Int32 page) in PartController.cs: line 143
at Catalogue.MSpecTests.UI.Parts.when_asked_for_the_parts_list_view.<.ctor>b__6() in PartControllerTests.cs: line 214
어떻게 내 컨트롤러에 Request.IsAjaxRequest()
의 요청이 아약스 요청으로 전달받을 수 있나요 ???
감사 리치
편집 - this 후, 내 아약스 테스트 지금 통과하지만 내 비 아약스는 여전히 실패 발견.
당신은 아마 쉽게 구현할 수 및 모의하다이 같은 인터페이스를 만들어야합니다
꿈을 이루었습니다. 그런 식으로 생각하지 않았습니다. 나는 새로운 쌍의 눈이 필요하다고 생각한다. –