Как протестировать uploadfile в django

У меня есть форма uploadform и я хочу протестировать ее. Но есть проблема.

def test_if_can_upload_file(self):
    with open('app_blog/tests/test.txt') as file:
        self.client.post(reverse('csv_blog'), {'attachment': file})
        test_file = file.read()
        self.assertEqual(test_file, 'test file')

Когда я тестирую его, возникает ошибка:

self.assertEqual(test_file, 'test file')
AssertionError: '' != 'test file'
+ test file

Почему мой файл отображается как пустой? На самом деле он не пустой. Или, может быть, я неправильно тестирую свою форму?

form

class UploadBlogForm(forms.ModelForm):
    file = forms.FileField()

    class Meta:
        model = Blog
        fields = 'file',

view

def upload_blog(request):
    if request.method == "POST":
        upload_file_form = UploadBlogForm(request.POST, request.FILES)
        if upload_file_form.is_valid():
            blog_file = upload_file_form.cleaned_data['file'].read()
            blog_str = blog_file.decode('utf-8').split('\n')
            csv_reader = reader(blog_str, delimiter=":::", quotechar='"')

Ваш self.client.post(…) уже исчерпал обработчик файла и прочитал все содержимое файла, это означает, что когда вы вызываете file.read(), курсор уже переместился в конец файла, и поэтому возвращает пустую строку.

Вы должны снова открыть файл и прочитать его с начала, так:

def test_if_can_upload_file(self):
    with open('app_blog/tests/test.txt') as file:
        self.client.post(reverse('csv_blog'), {'attachment': file})
    with open('app_blog/tests/test.txt') as file:
        test_file = file.read()
        self.assertEqual(test_file, 'test file')
Вернуться на верх