Il va probablement s'avérer que j'ai juste besoin d'une autre paire d'yeux. Je dois manquer quelque chose, mais je n'arrive pas à comprendre pourquoi ce genre de chose ne peut pas être testé. J'essaie essentiellement de m'assurer que les utilisateurs non authentifiés ne peuvent pas accéder à la vue en marquant le contrôleur avec l'attribut [Authorize] et j'essaie de tester cela en utilisant le code suivant :
[Fact]
public void ShouldRedirectToLoginForUnauthenticatedUsers()
{
var mockControllerContext = new Mock<ControllerContext>()
{ DefaultValue = DefaultValue.Mock };
var controller = new MyAdminController()
{ControllerContext = mockControllerContext.Object};
mockControllerContext.Setup(c =>
c.HttpContext.Request.IsAuthenticated).Returns(false);
var result = controller.Index();
Assert.IsAssignableFrom<RedirectResult>(result);
}
Le RedirectResult que je recherche est une sorte d'indication que l'utilisateur est redirigé vers le formulaire de connexion, mais au lieu de cela, un ViewResult est toujours renvoyé et lors du débogage, je peux voir que la méthode Index() est frappée avec succès même si l'utilisateur n'est pas authentifié.
Est-ce que je fais quelque chose de mal ? Je teste au mauvais niveau ? Devrais-je plutôt tester au niveau de la route pour ce genre de choses ?
Je sais que l'attribut [Authorize] fonctionne, car lorsque je lance la page, l'écran de connexion m'est effectivement imposé - mais comment puis-je vérifier cela dans un test ?
Le contrôleur et la méthode d'indexation sont très simples, juste pour que je puisse vérifier le comportement. Je les ai inclus par souci d'exhaustivité :
[Authorize]
public class MyAdminController : Controller
{
public ActionResult Index()
{
return View();
}
}
Toute aide est appréciée...
0 votes
Une façon de tester ceci est d'utiliser les tests d'intégration en utilisant le serveur hôte en mémoire fourni par Microsoft.AspNetCore.Mvc.Testing, dans lequel vous pouvez simuler AuthHandler. Les détails peuvent être trouvés ici : docs.microsoft.com/en-us/aspnet/core/test/