我已经开始在Django建立一个网站,而我正试图为它编写单元测试,但是,我无法让这个单元测试通过。
def test_email_already_in_use(self):
user_email = 'testing_email@testing.com'
password = 'testing_password'
User.objects.create_user(username=user_email, password=password)
tmp = User.objects.filter(email=user_email).exists()
form_data = {'email': user_email, 'password': password}
with self.assertRaises(ValidationError):
form = UserForm(data=form_data)
form.clean_email()
问题是tmp总是假的(tmp只是用来帮助我调试而不必再进一步。存在检查通常在clean_email中完成)。但是,当我运行代码的网站正常运行时,我尝试使用现有电子邮件创建新用户。我显然错过了create_user的工作方式。
当我尝试使用相同的电子邮件创建新用户时,这是正确检查已使用的电子邮件的代码。
def clean_email(self):
email = self.data['email']
if User.objects.filter(email=email).exists():
raise ValidationError("Email already in use")
if len(email) > 100:
raise ValidationError("Email length exceeds 100")
return email
答案 0 :(得分:1)
如果您使用的是django.contrib.auth.models.User,则用户名和电子邮件字段会有所不同。以下代码行不会在电子邮件字段
中创建具有给定电子邮件地址的对象 User.objects.create_user(username=user_email, password=password)
因此,您的存在查询应该是
tmp = User.objects.filter(username=user_email).exists()