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?

Était-ce utile?

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());
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top