我正在为一个视图PersonRemoveView
创建一个单元测试,它只修改名为Person
的模型中名为deletion_date
的日期时间字段。此字段是None
,直到执行此视图,然后将其设置为timezone.now()
问题是在从单元测试执行视图之后,deletion_date
的值是None
。在
这是测试:
def test_person_remove_view(self):
person = models.Person.objects.get(pk=1)
request = self.factory.post('/person/remove/{}'.format(person.id))
response = PersonRemoveView.as_view()(request, pk=person.id)
self.assertIsNotNone(person.deletion_date)
这是一个观点:
class PersonRemoveView(PermissionRequiredMixin, generic.DeleteView):
model = Person
success_url = reverse_lazy('control:person_list')
def dispatch(self, request, *args, **kwargs):
self.object = self.get_object()
self.object.deletion_date = timezone.now()
self.object.save()
return HttpResponseRedirect(self.success_url)
我一直在调试,dispatch
方法按预期执行,但临时测试数据库没有更改,assertIsNotNone
方法失败
在测试中,从数据库中获取Person实例,然后执行视图,该视图修改数据库,但不修改之前检索的对象。您需要在执行视图之后调用
person.refresh_from_db()
(documentation),以从数据库中获取最新的更改。在模型实例不共享,因此您必须在测试中重新加载实例,以确定视图是否正确更改了基础数据库记录:
相关问题 更多 >
编程相关推荐