3 votes

Se moquer des formulaires dans les tests unitaires de la vue

Je ne semble pas pouvoir simuler le comportement d'un formulaire lors de tests unitaires de vues.

Mon formulaire est un simple ModelForm et se trouve dans profiles.forms. La vue est (encore une fois) une vue simple qui vérifie si le formulaire est valide, puis redirige.

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render
from django.urls import reverse
from profiles.forms import ProfileForm

def home(request):
    form = ProfileForm()

    if request.method == 'POST':
        form = ProfileForm(request.POST)

        if form.is_valid():
            profile = form.save()
            return HttpResponseRedirect(reverse("thanks"))

Mon test ressemble à ceci :

class TestViewHomePost(TestCase):
    def setUp(self):
        self.factory = RequestFactory()

    def test_form(self):
        with mock.patch('profiles.views.ProfileForm') as mock_profile_form:
            mock_profile_form.is_valid.return_value = True
            request = self.factory.post(reverse("home"), data={})
            response = home(request)
            logger.debug(mock_profile_form.is_valid.call_count)    # "0"

is_valid n'est pas appelé sur le mock, ce qui signifie que ProfileForm n'est pas patché.

Où ai-je commis une erreur ?

1voto

udo Points 1352

J'ai pu réparer le moquage is_valid comme suit :

def test_form(self):
        with mock.patch('profiles.views.ProfileForm.is_valid') as mock_profile_form:
            mock_profile_form.return_value = True
            request = self.factory.post(reverse("home"), data={})
            response = home(request)

note : et vous pourriez utiliser mock_profile_form.assert_called_once() pour vérifier si le moque a été appelé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X