2010-05-03 5 views
4

J'utilise MVC2 avec MvcContrib HelpTester.Problème MvcContrib Test Helper

J'ai un problème avec les contrôleurs de test qui sont dans les zones.

Voici ma classe de test:

[TestFixture] 
    public class RouteTests 
    { 


     [TestFixtureSetUp] 
     public void Setup() 
     { 
      RouteTable.Routes.Clear(); 
      MvcApplication.RegisterRoutes(RouteTable.Routes); 
     } 

     [Test] 
     public void RootMatchesHome() 
     { 
      "~/".ShouldMapTo<TradersSite.Controllers.HomeController>(x => x.Index()); 

     } 


     [Test] 
     public void AdminProductShouldMapToIndex() 
     { 
      "~/Admin/Produit/".ShouldMapTo<TradersSite.Areas.Admin.Controllers.ProductController>(x => x.Index()); 

     } 

est ici l'indice d'action de mon ProductController dans la zone Admin:

public ActionResult Index(int? page) 
     { 
      int pageSize = 10; 
      int startIndex = page.GetValueOrDefault() * pageSize; 

      var products = _productRepository.GetAllProducts() 
              .Skip(startIndex) 
              .Take(pageSize); 

      return View("Index", products); 
     } 

Voici la carte de l'itinéraire dans mon AdminAreaRefistration:

public override void RegisterArea(AreaRegistrationContext context) 
     { 
      context.MapRoute(
       "Admin_default", 
       "Admin/{controller}/{action}/{id}", 
       new { action = "Index", id = UrlParameter.Optional } 
      ); 
     } 

Enfin voici le message que je reçois de MbUnit:

[montage-setup] succès [échec] RouteTests.AdminProductShouldMapToIndex TestCase 'RouteTests.AdminProductShouldMapToIndex' a échoué: produit attendu, mais était administrateur MvcContrib.TestHelper.AssertionException Message: produit attendu, mais était administrateur Source: MvcContrib.TestHelper StackTrace: RouteTests.cs (44,0): à CBL.Traders.ControllerTests.RouteTests.AdminProductShouldMapToIndex()

Répondre

4

Vos routes de la région ne sont pas enregistrés dans la configuration. Puisque vous appelez simplement RegisterRoutes, qui (par défaut) n'enregistre pas les zones, il est manqué.

Vous pouvez soit trouver un moyen d'appeler AreaRegistration.RegisterAllAreas() directement (qui est généralement appelé au démarrage de l'application, ou vous devez enregistrer manuellement chaque zone que vous voulez tester.) Dans votre cas, ce qui suit fonctionnerait:

public void Setup() 
{ 
    RouteTable.Routes.Clear(); 

    var adminArea = new AdminAreaRegistration(); 
    var context = new AreaRegistrationContext("Default", RouteTable.Routes); 
    adminArea.RegisterArea(context); 

    MvcApplication.RegisterRoutes(RouteTable.Routes); 
}