繁体   English   中英

如何测试 Django CreateView 和 form_valid

[英]How to test Django CreateView and form_valid

这可能非常基本,但我仍然无法理解如何测试具有form_valid(self, form)方法的 Django CreateView

这是我的代码:

class NewPatientFormView(LoginRequiredMixin, CreateView):
    model = Patient
    fields = ['name', 'surname', 'phone', 'email', 'PESEL', 'age',
          'patient_agreement']

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.created_by_user = self.request.user
        self.object.save()
        return super().form_valid(form)`

我正在使用 pytest,我只是不明白如何测试这个。 我真的很感激一个简短的例子,如何测试它......谢谢!

这里再次是你所拥有的课程:

class NewPatientFormView(LoginRequiredMixin, CreateView):
    model = Patient
    fields = ['name', 'surname', 'phone', 'email', 'PESEL', 'age',
      'patient_agreement']
    

    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.created_by_user = self.request.user
        self.object.save()
        return super().form_valid(form)

我们可以使用请求工厂来测试表单验证:

import pytest
from django.test import RequestFactory
from django.contrib.auth.models import User    

factory = RequestFactory()

@pytest.mark.django_db
def test_form_valid_on_create_view():
    # Arrange
    data = {
       'name': 'Billy',
       'surname': 'Masters',
       'phone': '123-358-2382',
       # other fields
    } 
  
    user = User.objects.create_user(
        username='jacob', email='jacob@…', password='top_secret')

    request = factory.post( '/[Path to new Patient Form]/', data=data)
    request.user = user
   
    # Act
    response = NewPatientFormView.as_view()(request) # this will submit the form and run the form_valid.  

    # Assert
    
    Assert True

    

我相信,你必须在创建后的数据和这样setUp您的测试。

class NewPatientFormTest(TestCase):

    def setUp(self):
        self.form_data = {
            'name': 'Billy',
            'surname': 'Masters',
            'phone': '123-358-2382',
            *...the rest of your form data...*
        }

在你setUp确保您的数据的其余部分的设置适当。 然后使用您的测试 - 可能是这样的:

def test_new_patient_form_is_valid(self):
    form = NewPatientForm(data=self.form_data)
    self.assertTrue(form.is_valid())

显然,这是超级简化的 - 但应该让您在进行此测试时朝着正确的方向前进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM