在视图单元测试中模拟表单
Mocking forms in view unit tests
我似乎无法在对视图进行单元测试时模拟表单的行为。
我的表单是一个简单的 ModelForm,位于 profiles.forms
中。该视图(再次)是一个简单的视图,它检查表单是否有效然后重定向。
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"))
我的测试是这样的:
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
未在 mock 上调用,这意味着 ProfileForm 未修补。
我哪里弄错了?
我能够修复模拟 is_valid
如下:
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)
注意:您可以使用 mock_profile_form.assert_called_once()
检查是否已调用模拟。
我似乎无法在对视图进行单元测试时模拟表单的行为。
我的表单是一个简单的 ModelForm,位于 profiles.forms
中。该视图(再次)是一个简单的视图,它检查表单是否有效然后重定向。
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"))
我的测试是这样的:
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
未在 mock 上调用,这意味着 ProfileForm 未修补。
我哪里弄错了?
我能够修复模拟 is_valid
如下:
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)
注意:您可以使用 mock_profile_form.assert_called_once()
检查是否已调用模拟。