python - 如何使用 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
解决方案
推荐阅读
- java - 在 Vert.x 上从 DB 提供媒体文件
- vue.js - 如何在 Firestore db 更改上重新加载 dom 元素?
- python - 在python中找到匹配词的上游5个词
- android - 跨设备和平台的毫秒精度的同步时间戳
- vue.js - Vue-Apollo - 无法访问查询结果
- linux - 在linux上安装软件时添加软件bin还是只在bin中添加可执行文件的软链接?
- jenkins - 将 Jenkins 布尔管道迁移到 Teamcity 构建链的问题
- php - Laravel 和护照:POST 方法返回 MethodNotAllowedHttpException
- database - 在 Crystal Reports 中查找日期的公式
- c# - 为什么当我使用生产(基本应用服务)插槽时 Azure 应用服务不能可靠地读取我的连接字符串