web-dev-qa-db-fra.com

Django test RequestFactory vs Client

J'essaie de décider si je dois utiliser Client ou RequestFactory de Django pour tester mes vues.

Je crée mon serveur en utilisant DjangoRESTFramework et c'est vraiment simple, jusqu'à présent:

class SimpleModelList(generics.ListCreateAPIView):
    """
    Retrieve list of all route_areas or create a new one.
    """
    queryset = SimpleModel.objects.all()
    serializer_class = SimpleModelSerializer
    filter_backends = (IsOwnerFilterBackend,)

    def perform_create(self, serializer):
        serializer.save(owner=self.request.user)

Quelles sont les différences entre les tests avec Client et RequestFactory de Django et quelle approche est la plus appropriée pour tester un serveur REST (s'il existe une différence en plus d'en aimer un) mieux)?

Dois-je créer des tests avec les deux afin de fournir une meilleure couverture pour mon système?

47
t.pimentel

RequestFactory et Client ont des cas d'utilisation très différents. Pour le mettre en une seule phrase: RequestFactory renvoie un request, tandis que Client renvoie un response.

RequestFactory fait ce qu'il dit - c'est une fabrique pour créer request objets. Ni plus ni moins.

Client est utilisé pour simuler un cycle complet de requête-réponse. Il créera un objet request, qu'il passera ensuite à travers un gestionnaire WSGI. Ce gestionnaire résout l'URL, appelle le middleware approprié et exécute la vue. Il renvoie ensuite l'objet de réponse. Il présente l'avantage supplémentaire de rassembler de nombreuses données supplémentaires sur l'objet response qui sont extrêmement utiles pour les tests.

RequestFactory ne touche en fait aucun de votre code, mais l'objet request peut être utilisé pour tester des parties de votre code qui nécessitent un request valide. Le Client exécute vos vues, donc pour tester vos vues, vous devez utiliser le Client et inspecter la réponse. N'oubliez pas de vérifier la documentation sur le Client.

60
knbk