Erreur à l'aide MvcContrib TestHelper
-
24-10-2019 - |
Question
Tout en essayant de mettre en œuvre la deuxième réponse à une question précédente , je reçois une erreur.
J'ai mis en œuvre les méthodes tout comme les spectacles de poste, et les trois premiers travaux correctement. Le quatrième (HomeController_Delete_Action_Handler_Should_Redirect_If_Model_Successfully_Delete) donne cette erreur:. Impossible de trouver un paramètre « contrôleur » nommé dans la collection de valeurs du résultat
Si je change le code:
actual
.AssertActionRedirect()
.ToAction("Index");
il fonctionne correctement, mais je ne aime pas la « chaîne magique » là-bas et préfèrent utiliser la méthode lambda que l'autre affiche utilisée.
Ma méthode contrôleur ressemble à ceci:
[HttpPost]
public ActionResult Delete(State model)
{
try
{
if( model == null )
{
return View( model );
}
_stateService.Delete( model );
return RedirectToAction("Index");
}
catch
{
return View( model );
}
}
Qu'est-ce que je fais mal?
La solution
MVCContrib.TestHelper
vous attend de spécifier le nom du contrôleur lors de la redirection dans l'action Delete
:
return RedirectToAction("Index", "Home");
Ensuite, vous pourrez utiliser l'affirmation fortement typé:
actual
.AssertActionRedirect()
.ToAction<HomeController>(c => c.Index());
Une autre alternative est d'écrire votre propre méthode d'extension 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);
}
}
qui vous permet de laisser la redirection comme il est:
return RedirectToAction("Index");
et tester le résultat comme ceci:
actual
.AssertActionRedirect()
.ToActionCustom<HomeController>(c => c.Index());