2017-04-23 76 views
2

单元测试视图时,我似乎无法模拟表单的行为。单元测试中的嘲讽表单

我的表单是一个简单的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不会被调用的模拟,这意味着ProfileForm未打补丁。

我在哪里犯了一个错误?

回答

1

我能够解决嘲讽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()检查模拟被调用。