我对asp.net mvc使用restful routing module,对此非常满意。但是我什么也做不了。例如,我有一个类似的控制器动作:
public ActionResult Index()
{
if (Request.IsAjaxRequest())
return PartialView();
return View();
}
并且编写这样的规范没有问题:
[Subject(typeof(LotsController))]
public class When_Index_called
{
static LotsController controller;
static ActionResult actionResult;
Establish context = () => {
controller = mocker.Create<LotsController>();
controller.ControllerContext = Contexts.Controller.Default;
};
Because of = () => actionResult = controller.Index();
It should_render_view = () => actionResult.AssertViewRendered().ForViewWithDefaultName();
但是,通过使用其余部分,我想要一个这样的Index方法:
public ActionResult Index()
{
return RespondTo(format => {
format.Html = () => {
if (Request.IsAjaxRequest())
return PartialView();
return View();
};
format.Json = () => Json(new { });
});
}
确保先前的规范失败,因为操作结果不是ViewResult类型,而是FormatResult类型。 FormatResult本身会覆盖ExecuteResult方法,该方法返回void。如果要验证FormatResult中的操作结果类型和数据,如何对这种情况进行单元测试?
最佳答案
在将来的静态路由版本中,这样的代码是可能的:
var formatResult = actionResult as FormatResult;
ActionResult result = formatResult.ExposeResult().Html();
result.ShouldBeOfType<ViewResult>();