Вопрос:
Я пытаюсь проверить форму, содержащую ImageField, и я получаю сообщение об ошибке. Я попытался пройти через код Django, но я все время теряюсь, и я не вижу проблемы. Я исследовал, как это должно быть сделано, и я думал, что все делаю правильно.
Здесь ошибка, которая возникает в утверждении assertTrue в моем тесте:
TypeError: is_valid() takes exactly 2 arguments (1 given)
Вот мои файлы:
# forms.py class UploadMainPhotoForm(forms.Form): photo = forms.ImageField(error_messages={‘required’: err_msg__did_not_choose_photo}) def is_valid(self, request): # Run parent validation first valid = super(UploadMainPhotoForm, self).is_valid() if not valid: return valid if request.FILES: photo_file = request.FILES[‘photo’] file_name, file_ext = os.path.splitext(photo_file.name) else: self._errors[‘photo’] = ‘You forgot to select a photo.’ return False # Return an error if the photo file has no extension if not file_ext: self._errors[‘photo’] = err_msg__photo_file_must_be_jpeg return False return True # upload_photo.html (template) <form method=»post» enctype=»multipart/form-data» action=».»>{% csrf_token %} <input type=»file» name=»photo» /> <input type=»submit» name=»skip_photo» value=»Skip Photo» /> <input type=»submit» name=»upload_photo» value=»Upload Photo»> </form> # form_tests.py class TestUploadMainPhotoForm(TestCase): def initial_test(self): post_inputs = {‘upload_photo’: ‘[Upload Photo]’} test_photo = open(‘photo.jpg’, ‘rb’) file_data = {‘file’: SimpleUploadedFile(test_photo.name, test_photo.read())} self.assertTrue(UploadMainPhotoForm(post_inputs, file_data).is_valid()) Лучший ответ:
Вот:
def is_valid(self, request):
Вы определили метод is_valid с request параметра и, вызывая его,
self.assertTrue(UploadMainPhotoForm(post_inputs, file_data).is_valid())
Вы не указали параметр. Отсюда и ошибка.
Вы можете использовать RequestFactory для получения объекта request в unittest.
from django.utils import unittest from django.test.client import RequestFactory class TestUploadMainPhotoForm(TestCase): def setUp(self): self.request = RequestFactory() def initial_test(self): post_inputs = {‘upload_photo’: ‘[Upload Photo]’} test_photo = open(‘photo.jpg’, ‘rb’) file_data = {‘file’: SimpleUploadedFile(test_photo.name, test_photo.read())} self.assertTrue(UploadMainPhotoForm(post_inputs, file_data).is_valid(self.request))