__init__() получил неожиданный аргумент ключевого слова 'required' в нетестировании Django
Я получил утверждение и ошибку типа при написании модульного теста Django для моего приложения, может ли кто-нибудь проверить и помочь мне решить это. Оба теста работают нормально, только вывод при вызове form.is_invalid() отличается.
Ошибка1:
Traceback (most recent call last):
File "D:\open-source\localflavourtest\test_np\tests.py", line 104, in test_NepalPostalCodeFieldTest
self.assertFieldOutput(NepalDetailsTestForm, valid, invalid)
File "C:\Users\Asus\Envs\test\lib\site-packages\django\test\testcases.py", line 753, in assertFieldOutput
optional = fieldclass(*field_args, **{**field_kwargs, 'required': False})
TypeError: __init__() got an unexpected keyword argument 'required'
Ошибка 2
FAIL: test_NepalPostalCodeFieldTest (test_np.tests.NepalCodeTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "D:\open-source\localflavourtest\test_np\tests.py", line 113, in test_NepalPostalCodeFieldTest
self.assertEqual(form.errors['postal_code'], error_format)
AssertionError: ['Ensure this value has at most 5 characters [51 chars]XXX'] != ['Enter a postal code in the format XXXXX']
Вот мой код, я отметил строку, где я получаю эти ошибки,
class NepalPostalCodeValidator(RegexValidator):
default_error_messages = {
'invalid': _('Enter a postal code in the format XXXXX'),
}
def __init__(self,*args, **kwargs):
super().__init__(re.compile(r'^\d{5}$'), *args,**kwargs)
class PostalCodeFormField(RegexField):
default_error_messages = {
'invalid': _('Enter a postal code in the format XXXXX'),
}
def __init__(self,max_length = 5, **kwargs):
super().__init__(r'^\d{5}$', max_length = max_length, **kwargs)
class PostalCodeField(models.CharField):
description = _("Postal Code")
def __init__(self, *args, **kwargs):
kwargs['max_length'] = 5
super().__init__(*args, **kwargs)
self.validators.append(NepalPostalCodeValidator())
def formfield(self, **kwargs):
defaults = {'form_class': PostalCodeFormField}
defaults.update(kwargs)
return super().formfield(**defaults)
class NepalDetailsTestModel(models.Model):
postal_code = PostalCodeField()
class NepalDetailsTestForm(forms.ModelForm):
class Meta:
model = NepalDetailsTestModel
fields = ('postal_code',)
class NepalCodeTest(TestCase):
def test_NepalPostalCodeFieldTest(self):
error_format = ['Enter a postal code in the format XXXXX']
valid = {
'12345': '12345',
'00000':'00000',
'23476': '23476'
}
invalid = {
'12345_123': error_format,
'1234-123': error_format,
'abcde-abc': error_format,
'12345-': error_format,
'-123': error_format,
}
# getting type error at this place
# Error 1 as given above
self.assertFieldOutput(NepalDetailsTestForm, valid, invalid)
for postal_code, _ in invalid.items():
form = NepalDetailsTestForm({
'postal_code':postal_code,
})
self.assertFalse(form.is_valid())
# getting assertion error at this place
# error 2 as given above.
self.assertEqual(form.errors['postal_code'], error_format)