Sto provando a testare il reindirizzamento del mio controller in MVC 4 .Net 4.5. Ecco un esempio:Test unità MVC 4 RedirectToAction
[TestMethod]
public void Register_PassValidModel_RedirectToHomeIndexShouldBeTrue()
{
//Arrange
var registerModel = new RegisterModel
{
Email = "[email protected]",
Password = "password"
};
//Assign
var result = _controller.Register(registerModel) as RedirectToRouteResult;
//Assert
result.RouteValues["Action"].ShouldBeEqual("Index");
result.RouteValues["Controller"].ShouldBeEqual("Home");
}
Ecco il controllore:
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
var userToRegister = new User { Email = model.Email, Password = model.Password };
var service = new UserService(_userRepository);
User user = service.RegisterUser(userToRegister);
if (user.UserErrorMessages.Count != 0)
{
user.UserErrorMessages.ForEach(x => ModelState.AddModelError("", x));
return View(model);
}
SetCookie(model.Email);
return RedirectToAction("Index", "Home");
}
return View(model);
}
La questione della variabile result
nella prova unità è null
. Ho trovato questo codice da qualcuno che stava lavorando su un progetto MVC 2 e sembrava funzionare per lui. Qualcosa è cambiato con MVC 4?
Grazie in anticipo!
Sei sicuro di azione in realtà torna RedirectToAction ("Indice", "Home")? Ci dovrebbe essere qualche logica nell'azione del registro. Se restituisce qualsiasi altro tipo di risultato e si sta tentando di renderlo come RedirectToRouteResult di quanto si otterrà nulla. – Felix
Ho trovato un oggetto RedirectToRouteResult quando ho provato. Sei sicuro che il controller sia proprio così? – Rickard
Immagino che potresti avere un ViewResult – VJAI