如何在不进行硬编码的情况下满足django单元测试中的唯一约束?

时间:2019-08-18 08:57:20

标签: django unit-testing django-models unique-constraint model-mommy

我在会员模型的电子邮件字段上设置了唯一约束。现在,在编写单元测试时,由于唯一约束到期,我的测试失败了。

def setUp(self):
    self.car_provider = mommy.make(Member, username="car_provider")
    self.car_provider.set_password("12345678")
    self.car_provider.save()

    self.applicant = mommy.make(Member, username="applicant")
    self.applicant.set_password("12345678")
    self.applicant.save()

我收到以下错误: “ django.db.utils.IntegrityError:重复的键值违反了唯一约束” account_member_email_a727987b_uniq“ 详细信息:密钥(电子邮件)=()已经存在。“

1 个答案:

答案 0 :(得分:0)

如果将email设置为唯一字段,则实际上您必须对此情况进行测试并以某种方式处理该异常。

但是要进行此测试,您应该在每个email调用中为mommy.make()字段提供一个明确的值。或者,您可以使用_fill_optional选项用随机生成的值填充它。

赞:

self.car_provider = mommy.make(Member, username="car_provider", _fill_optional=['email'])