Lau*_*Mat 6 django mocking django-forms django-unittest
在单元测试视图时,我似乎无法模拟表单的行为。
我的表单是一个简单的 ModelForm 并驻留在profiles.forms. 该视图(再次)是一个简单的视图,它检查表单是否有效然后重定向。
视图.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"))
Run Code Online (Sandbox Code Playgroud)
我的测试是这样的:
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"
Run Code Online (Sandbox Code Playgroud)
is_valid 没有在模拟上被调用,这意味着 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)
Run Code Online (Sandbox Code Playgroud)
注意:您可以用来mock_profile_form.assert_called_once()检查模拟是否已被调用。
| 归档时间: |
|
| 查看次数: |
1547 次 |
| 最近记录: |