Как проверить ValidationError в функции с помощью assertRaises()
Я нашел эту assertRaises() для тестирования валидаторов в pytest, но я не могу использовать ее в своей тестовой функции, потому что все примеры используют классы. Все примеры, которые я нашел, используют self.assertRaises(), но я не могу использовать self. Примеры, которые я пытался понять:
model.py - модель, которую я тестирую на наличие валидаторов `
class AdTextTemplate(models.Model):
adtext_template_headline_1 = models.CharField(max_length=270, validators=[headline_with_keyword_validation])
adtext_template_headline_2 = models.CharField(max_length=270, validators=[headline_with_keyword_validation])
adtext_template_description_1 = models.CharField(max_length=810, validators=[description_with_keyword_validation])
adtext_template_description_2 = models.CharField(max_length=810, validators=[description_with_keyword_validation])
campaign = models.ManyToManyField(Campaign, blank=True)
conftest.py
@pytest.fixture
def campaigns(users):
lst = []
for user in users:
lst.append(Campaign.objects.create(campaign_name='test_campaign', user=user))
return lst
@pytest.fixture
def adtext_templates_headline_exceed_char_limit(campaigns):
lst = []
for campaign in campaigns:
x = AdTextTemplate.objects.create(
adtext_template_headline_1='test template headline1 that have 41char',
adtext_template_headline_2='test template headline2 that have 41char',
adtext_template_description_1='test template description 1',
adtext_template_description_2='test template description 2',
)
x.campaign.add(campaign)
lst.append(x)
return lst
tests.py
@pytest.mark.django_db
def test_validation_error(adtext_templates_headline_exceed_char_limit):
adtext_template = adtext_templates_headline_exceed_char_limit[0]
with adtext_template.assertRaises(ValidationError):
assert adtext_template.full_clean()
Я знаю, что часть adtext_template.assertRaises()
не очень хорошая, потому что там должно быть self.assertRaises(ValidationError)
, но мой тест не является классом. Я бы хотел, чтобы так и оставалось, потому что мой наставник сказал, что данные для тестирования должны быть в fixtures в conftest.py, а тесты должны быть в test и быть настолько простыми и понятными, насколько это возможно.
Также я не могу написать класс в tests.py, который будет работать :/.