Тестирование формы Django с загрузкой CSV - PullRequest
0 голосов
/ 04 июня 2019

У меня есть форма, в которую пользователь загружает файл CSV для обработки данных. В настоящее время я пытаюсь проверить метод form.is_valid(). Однако я следую документации по Django, и форма все еще возвращает ошибку, что поле требует значения. Есть идеи?

Документация

Документация показывает следующий пример -

>>> c = Client()
>>> with open('wishlist.doc') as fp:
...     c.post('/customers/wishes/', {'name': 'fred', 'attachment': fp})

Тест

class TestImportCSVForm(TestCase):

    def test_form_valid(self):
        with open('fake.csv', 'r', newline='') as csvfile:
            form_data = {
                'csv_file':  csvfile,
            }
            form = ImportCSVForm(data=form_data)
            self.assertTrue(form.is_valid())

Форма

class ImportCSVForm(forms.Form):
    """ Form for uploading CSVs """
    csv_file = forms.FileField(
        label=_("CSV File"),
        help_text=_("Upload a CSV"))

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.layout = Layout(
            'csv_file',
            HTML("""<hr>"""),
            ButtonHolder(
                Submit('submit', 'Submit', css_class='btn btn-primary')
            )
        )

Ошибка при запуске теста

(Pdb) form.errors
{'csv_file': ['This field is required.']}

1 Ответ

1 голос
/ 04 июня 2019

Вам нужно передать файлы в форму с файлами kwarg.

класс TestImportCSVForm (TestCase):

def test_form_valid(self):
    with File(file=tempfile.NamedTemporaryFile()) as csvfile:
        csvfile.write(b'test')
        csvfile.flush()
        form_data = {
            'csv_file':  csvfile,
        }
        form = ImportCSVForm(files=form_data)
        self.assertTrue(form.is_valid())
...