首页 > 解决方案 > 如何使用 kwargs 对 Django ModelForms 进行单元测试

问题描述

我正在尝试为 Django ModelForm 编写单元测试。此表单的init方法已被覆盖,以便访问 kwargs 变量中的当前用户。但是,每当我运行测试时,它总是会带来这个错误

    form = UserCreationForm(data={'email': 'test@email.com',
  File "C:\Users\CODING\django\project1\bookapp\forms.py", line 45, in __init__
    self.current_user = kwargs.pop('current_user')
KeyError: 'current_user'

视图.py

@method_decorator([login_required], name='dispatch') # Only logged in users can access the page
class BookCreateView(CreateView):    
    template_name = "new_book.html"
    model = Book

    def get_form_kwargs(self):
        kwargs = super(BookCreateView, self).get_form_kwargs()
        kwargs['current_user'] = self.request.user
        return kwargs

表格.py

class BookCreationForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = ('title', 'isbn', 'author')        
        
    def __init__(self, *args, **kwargs):
        self.current_user = kwargs.pop('current_user') # Line 45
        super().__init__(*args, **kwargs)
        # Some removed code

测试

def test_save(self):
     new_user = get_user_model().objects.create_user(            
        email='test1@email.com',
        password='secret', 
        first_name='John', 
        last_name='Doe',
    )
    user = get_user_model().objects.get(id=1)
    # This tests the save method     
    form = BookCreationForm(data={'email': 'test@email.com', 
                                 'first_name': 'John',
                                 'last_name': 'Doe',                                 
                                 'current_user': user,
                            })
    book = form.save()

每当我运行测试时,它都会因此而失败KeyError

标签: pythondjangodjango-viewsdjango-forms

解决方案


推荐阅读