我有以下视图,除了POST请求,并序列化一个对象数据(Draftschedule)来创建一个新的副本(FrozenSchedule):
from reports.tasks import create_frozen_schedule
def freeze_schedule(request, pk):
"""Valid post request will freeze a Draft Schedule serializing its data"""
client = get_object_or_404(Client, draftschedule=pk)
try:
# Serialize data into a FrozenSchedule object
frozenschedule = create_frozen_schedule(pk, request.user.id)
except IntegrityError:
# Warn user if action failed
messages.warning(request, "A Schedule of this Type already exists")
return redirect(client.draftschedule)
else:
# If Schedule is Frozen successfully
messages.success(request, "Schedule Frozen")
return redirect(frozenschedule)
我试图编写一个测试来断言在IntegrityError被引发后发生的某些事情。我正在努力理解它为什么会失败,因为我对嘲弄/修补相当缺乏经验,所以我不太清楚我到底哪里出了问题。在
我试图模拟create_frozen_schedule
函数,以便在调用时引发IntegrityError:
但最后我得出了以下错误:
.......................................................................................F............
======================================================================
FAIL: test_freeze_schedule_with_conflict (reports.tests.test_views.TestFreezeSchedule)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/usr/lib/python3.4/unittest/mock.py", line 1136, in patched
return func(*args, **keywargs)
File "/home/jwe/piesup2/reports/tests/test_views.py", line 495, in test_freeze_schedule_with_conflict
self.client.post(self.url)
AssertionError: IntegrityError not raised
----------------------------------------------------------------------
注意事项:
create_frozen_schedule
代码,因为
连载是相当冗长的,据我所知
实现细节无论如何都不重要,因为我在嘲笑
功能。在IntegrityError本身的目的是防止重复的FrozenSchedule
对象,其元类如下所示:
class Meta:
# ...
unique_together = ('client', 'data',)
你知道为什么没有引起副作用吗?在
如果你想真正测试你的函数抛出了异常,你需要直接测试这个函数,而不是通过POST。比如:
视图捕捉IntegrityError并返回重定向。测试调用的客户端post根本不会引发错误。在
相反,您应该测试except块中的操作是否发生:是否设置了警告,post是否重定向到草稿计划而不是冻结的计划。在
相关问题 更多 >
编程相关推荐