I持って新しいコピーを作成するには、オブジェクトデータ(Draftschedule)をPOSTリクエストをexceptsで、そしてシリアライズ次のビュー、(FrozenSchedule):私は「Djangoのパッチ副作用IntegrityErrorが提起されていない
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が発生した後に特定のことが起こることを宣言するテストを書こうとしています。私はなぜそれが失敗しているのか理解するのには苦労しています。私が間違っているところは私にはすぐには分かりません。
私が呼ばれたときIntegrityErrorを高めるためにcreate_frozen_schedule
機能をモックしようとしました:
def setUp(self):
self.url = reverse(
'reports:draftschedule-freeze',
args=[self._client.draftschedule.pk]
)
super(TestFreezeSchedule, self).setUp()
@patch('reports.tasks.create_frozen_schedule')
def test_freeze_schedule_with_conflict(self, mock_freeze):
mock_freeze.side_effect = IntegrityError
with self.assertRaises(IntegrityError):
self.client.post(self.url)
# More unit tests following same premise...
しかし、私は次のエラーで終わる:注意すべき
.......................................................................................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
----------------------------------------------------------------------
ポイント:
- 私は実際のDjangoサイトのテストの外でこのエラーを再現できます。
- シリアライズは非常に長いったらしいですので、私は意図的に
create_frozen_schedule
コードを省略したのだが、私が 機能をからかってるので、 実装の詳細は、とにかく問題ではないことを私の理解です。 IntegrityError自体の目的は、そのメタクラスは以下のように見えるよう、重複
FrozenSchedule
オブジェクトを防ぐためです:class Meta: # ... unique_together = ('client', 'data',)
副作用が提起されていない理由を任意のアイデア?