Python 资产增值';t引发验证错误
当使用传递给它的无效文件测试ImageField时,Django断言没有引发ValidationError。这是在具有self.assertRaises的上下文中完成的。但是,当我访问form.errors.as_data()时,它显示从技术上讲正在引发ValidationError。我不清楚发生了什么事Python 资产增值';t引发验证错误,python,django,Python,Django,当使用传递给它的无效文件测试ImageField时,Django断言没有引发ValidationError。这是在具有self.assertRaises的上下文中完成的。但是,当我访问form.errors.as_data()时,它显示从技术上讲正在引发ValidationError。我不清楚发生了什么事 #tests.py from django.core.exceptions import ValidationError class SubmitProfileForm(TestCase):
#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())
实际结果:
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
仅在引发未捕获的错误时才会激发。这与做类似的事情:
def index_out_of_bounds():
数组=[“太”、“短”]
尝试:
x=阵列[100]
除索引器外:
打印(“错误!”)
索引超出界限()
这将在方法内部引发索引器,但由于它已被捕获,因此也不会触发assertRaises(indexer)
条件
# 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