2010-11-11 4 views
2

J'essaie d'utiliser l'API de test de routage MvcContrib TestHelper, mais je vois un comportement étrange. La méthode d'extension .WithMethod (HttpVerb) ne semble pas s'exécuter comme prévu. Voici mon contrôleur montrant (2) actions (nom identique) qui acceptent différents HttpVerbs:Problème avec MvcContrib TestHelper Test d'itinéraire fluide et HttpVerbs spécifiques

[HttpGet] 
public ActionResult IdentifyUser() 
{ 
    return View(new IdentifyUserViewModel()); 
} 

[HttpPost] 
public ActionResult IdentifyUser(IdentifyUserInputModel model) 
{ 
    return null; 
} 

Et voici le test qui devrait la carte à l'action avec le [HttpPost] attribut:

MvcApplication.RegisterRoutes(RouteTable.Routes); 

var routeData = "~/public/registration/useridentification/identifyuser" 
    .WithMethod(HttpVerbs.Post) 
    .ShouldMapTo<UserIdentificationController>(x => x.IdentifyUser(null)); 

Même Bien que le POST HttpVerb soit spécifié dans mon test, il est toujours dirigé vers la méthode HttpGet. Je peux même commenter l'action en acceptant HttpPost dans mon contrôleur et avoir encore le passage de test!

Y at-il quelque chose qui me manque ici?

Répondre

0

Cela peut être lié à la façon dont vous enregistrez vos itinéraires. Je crée généralement une classe qui ne fait que cela. Donc, avant tout test comme ceux ci-dessus, je m'assure que j'ai configuré mon appareil de test de manière appropriée.

[TestFixtureSetUp] 
public void TestFixtureSetUp() 
{ 
    RouteTable.Routes.Clear(); 
    new RouteConfigurator().RegisterRoutes(RouteTable.Routes); 
} 

Je pense que depuis le RouteTable les gère de manière statique, vous pourriez rencontrer des problèmes soit de ne pas ajouter, pas de compensation, ou en ajoutant trop de routes par vos essais.

+0

Merci pour la réponse Chris. Ce n'est pas lié à mes routes dans ce cas. Je peux vérifier cela en changeant le nom de mon action POST pour dire "IdentifyUserPost" et en essayant d'y accéder via une requête GET dans le navigateur. Cela échoue comme prévu, mais si je modifie mon test pour l'acheminer vers "~/public/registration/useridentification/identifyuserpost" ET le changer pour utiliser le verbe GET, je vois toujours un test réussi. Il semble que ce soit plus le résultat de l'exécution de l'action, juste un certain niveau de vérification de la route. Je regarde dans la source de MvcContrib pour en savoir plus ... –

Questions connexes