Django:如何测试非空字段

car*_*izo 5 python django django-models

当我的模型中未设置非空字段时,我试图使单元测试失败:

class Foo(models.Model):
    email = models.EmailField(
        unique=True,
        null=False,
        blank=False)

def testFoo(self):
    try:
        Foo.objects.create().save()
    except:
        self.fail("error!")
Run Code Online (Sandbox Code Playgroud)

但它永远不会失败。

当应用程序运行时,电子邮件格式和非空验证工作得很好,但我无法编写测试。

当然,我可以通过编程方式进行验证,但我不想重复自己。有任何想法吗?

Cra*_*sta 3

好吧,你有几个问题,让我列举一下:

  1. save是多余的。create已经保存了。
  2. 创建对象不会触发诸如“这封电子邮件是否有效”之类的验证。如果您尝试传入,email=None它将因您的null=False字段参数而失败,但电子邮件的默认值是'',因此它不会在该级别失败。如果您想验证电子邮件是否有效,请执行以下操作:

    def testFoo(self):
        try:
            a = Foo.objects.create()
            a.clean_fields()
        except:
            self.fail("error!")
    
    Run Code Online (Sandbox Code Playgroud)