gpt4 book ai didi

asp.net-mvc - 使用 MVCContrib TestHelper 时出错

转载 作者:行者123 更新时间:2023-12-01 09:09:23 26 4
gpt4 key购买 nike

在尝试实现 previous question 的第二个答案时,我收到错误消息。

我已经按照帖子显示的方法实现了这些方法,并且前三个工作正常。第四个(HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete)给出了这个错误:在结果的值集合中找不到名为“ Controller ”的参数。

如果我将代码更改为:

actual 
.AssertActionRedirect()
.ToAction("Index");

它工作正常,但我不喜欢那里的“魔术字符串”,更喜欢使用其他海报使用的 lambda 方法。

我的 Controller 方法如下所示:

    [HttpPost]
public ActionResult Delete(State model)
{
try
{
if( model == null )
{
return View( model );
}

_stateService.Delete( model );

return RedirectToAction("Index");
}
catch
{
return View( model );
}
}

我做错了什么?

最佳答案

MVCContrib.TestHelper 要求您在 Delete 操作中重定向时指定 Controller 名称:

return RedirectToAction("Index", "Home");

那么你就可以使用强类型断言了:

actual
.AssertActionRedirect()
.ToAction<HomeController>(c => c.Index());

另一种选择是编写自己的 ToActionCustom 扩展方法:

public static class TestHelperExtensions
{
public static RedirectToRouteResult ToActionCustom<TController>(
this RedirectToRouteResult result,
Expression<Action<TController>> action
) where TController : IController
{
var body = (MethodCallExpression)action.Body;
var name = body.Method.Name;
return result.ToAction(name);
}
}

这将允许您保持原样的重定向:

return RedirectToAction("Index");

并像这样测试结果:

actual
.AssertActionRedirect()
.ToActionCustom<HomeController>(c => c.Index());

关于asp.net-mvc - 使用 MVCContrib TestHelper 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com