gpt4 book ai didi

python - assertRaises 不会引发 ValidationError

转载 作者:行者123 更新时间:2023-12-01 07:05:57 33 4
gpt4 key购买 nike

当测试传递给它的无效文件的 ImageField 时,Django 断言不会引发ValidationError。这是在 with self.assertRaises 上下文中完成的。但是,当我访问 form.errors.as_data() 时,它显示技术上正在引发 ValidationError 。我不清楚发生了什么。

#tests.py
from django.core.exceptions import ValidationError

class SubmitProfileForm(TestCase):

@classmethod
def setUpTestData(cls):
cls.data = {
'email': 'test@email.com',
'birth':'2019-01-01',
'coding_level': 'Hobbyist',
'bio': 'About me...',
'github': 'http://www.github.com',
}
cls.image = open(join(dirname(__file__), 'images/test_file.txt'), 'rb')
cls.file = {
'avatar': SimpleUploadedFile(
name=cls.image.name,
content=cls.image.read()
)
}

def test_invalid_file_uploaded(self):
with self.assertRaises(ValidationError):
form = ProfileForm(self.data, self.file)
form.errors
print(form.errors.as_data())

# forms.py

class ProfileForm(ModelForm):

class Meta:
model = Profile
fields = (
'email', 'birth', 'coding_level', 'bio', 'github', 'avatar'
)
# models.py

class Profile(models.Model):

hobby = "Hobbyist"
develop = "Developer"
coding_level = (
(hobby, hobby),
(develop, develop)
)

user = models.OneToOneField(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
email = models.EmailField()
birth = models.DateField(verbose_name="Date Of Birth")
coding_level = models.CharField(
verbose_name="Experience",
max_length=20,
choices=coding_level, default=hobby, blank=False
)
bio = models.TextField(
verbose_name="User Bio",
validators=[MinLengthValidator(10, message="Add more to your bio!")]
)
github = models.URLField(
verbose_name="GitHub link",
validators=[check_submitted_link],
unique=True
)
avatar = models.ImageField(upload_to="images/%Y/%m/%d/")

实际结果:

print(form.errors.as_data())

'''{'avatar': [ValidationError(['Upload a valid image.
The file you uploaded was either not an image or a corrupted image.'])]}
'''

AssertionError: ValidationError not raised

预期结果:捕获 ValidationError

最佳答案

该错误是内部引发的,但被 Django 捕获。 assertRaises 仅当出现 Uncaught Error 时才会触发。这类似于执行以下操作:

def index_out_of_bounds():
array = ["too", "short"]
try:
x = array[100]
except IndexError:
print("Error!")

index_out_of_bounds()

这将在方法内引发 IndexError,但由于它被捕获,因此也不会触发 assertRaises(IndexError) 条件。

关于python - assertRaises 不会引发 ValidationError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58443210/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com