2017-04-23 137 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()檢查模擬被調用。