2010-05-28 8 views
2

Je commence juste à utiliser les TestHelpers dans MvcContrib. Je veux essayer et tester une méthode d'action sur mon contrôleur qui teste lui-même si IsAjaxRequest() est vrai.Débutant question sur MvcContrib TestHelpers

Je l'ai utilisé le même code qui apparaît dans les échantillons TestHelper pour mettre en place le TestControllerBuilder

_controller = new StarsController();  
_builder = new TestControllerBuilder(); 
_builder.InitializeController(_controller); 

Alors que _controller a toutes les truquées/moqué HttpContext à l'intérieur, ce qui est vraiment super. Mais que dois-je faire maintenant pour forcer IsAjaxRequest() sur l'objet Request faussé en interne à retourner vrai?

Répondre

2

Vous devez remplacer la propriété HttpRequest.Headers pour renvoyer une NameValueCollection contenant une entrée pour "X-Requested-With" avec la valeur "XMLHttpRequest".

+0

Merci c'est bien, mais comment puis-je réellement faire cela. Je ne connais pas du tout Rhino Mocks. J'ai un peu utilisé Moq mais je ne sais pas par où commencer avec la propriété HttpRequest.Headers. Pourrais-tu me montrer un petit code pour me lancer Patrick? –

+0

C'est ok, je l'ai compris. J'ai ajouté une autre réponse afin que je puisse coller le code que j'ai utilisé au cas où cela aiderait quelqu'un d'autre. Merci Patrick, vous m'avez certainement mis sur la bonne voie. –

+0

var request = _builder.HttpContext.Request; request.Stub (r => r.Headers) .Return (nouveau NameValueCollection {{"X-Requested-With", "XMLHttpRequest"}}); – PatrickSteele

7

Voici le code que j'ai utilisé, le code dans ma question en haut de la page utilise MvcContrib testhelpers pour créer un contrôleur joliment truqué (_controller) qui en interne a truqué des versions de HttpRequest, HttpResponse etc Puis, selon les conseils de Patrick I créé une nouvelle collection d'en-têtes contenant une entrée pour X-Requested-With. Puis dit à _controller.HttpContext.Request.headers de renvoyer ma collection d'en-têtes chaque fois qu'il essaye de regarder les en-têtes (c'est-à-dire ce qui se passe quand IsAjaxRequest() est appelé).

var headers = new NameValueCollection(); 
    headers.Add("X-Requested-With", "XMLHttpRequest"); 

    _controller.HttpContext.Request.Stub(r => r.Headers).Return(headers); 

Fonctionne comme un régal.