Как протестировать 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')