问题描述
我正在为多个对象模型编写测试,但以下测试未给出预期结果:
def test_image_on_delete(self):
image = Image(id=self.TEST_IMAGE_ID,name=self.TEST_IMAGE_NAME,src=self.TEST_IMAGE_SRC)
image.save()
category = Category.objects.get(id=self.TEST_ID)
category.image = Image.objects.get(id=self.TEST_IMAGE_ID)
Image.objects.get(id=self.TEST_IMAGE_ID).delete()
self.assertIsNone(category.image)
这是类别中的图像字段:
image = ForeignKey(Image,on_delete=SET_NULL,null=True)
我已经确认图像正在被删除,但是 assertIsNone 失败,因为类别的图像字段没有被清除。
我编写此测试或外键字段的方式有问题吗?
注意:我正在使用 django.test 中的 TestCase
解决方法
我发现了这个问题。 on_delete 修改了我的 Category 对象的 SAVED 版本,所以我在本地拥有的变量的副本没有改变。
这是我通过的修改后的测试:
def test_image_on_delete(self):
image = Image(id=self.TEST_IMAGE_ID,name=self.TEST_IMAGE_NAME,src=self.TEST_IMAGE_SRC)
image.save()
category = Category.objects.get(id=self.TEST_ID)
category.image = Image.objects.get(id=self.TEST_IMAGE_ID)
self.assertIsNotNone(category.image)
category.save()
Image.objects.get(id=self.TEST_IMAGE_ID).delete()
category = Category.objects.get(id=self.TEST_ID)
self.assertIsNone(category.image)